在軟件,如qtcreator你可以看到這樣的事情:如何實現快捷輸入框在Qt的
基本上一些框點擊它時,請您按以記錄快捷方式某些鍵盤組合。
我該如何在Qt中創建類似的東西?到目前爲止,我只能使用一個常規文本框來實現這一點,用戶必須自己輸入組合,如果出現不正確的消息框,但是如果用戶不必輸入東西像「ctrl + f2」,而是點擊這些鍵。
這是否有任何Qt部件?
在軟件,如qtcreator你可以看到這樣的事情:如何實現快捷輸入框在Qt的
基本上一些框點擊它時,請您按以記錄快捷方式某些鍵盤組合。
我該如何在Qt中創建類似的東西?到目前爲止,我只能使用一個常規文本框來實現這一點,用戶必須自己輸入組合,如果出現不正確的消息框,但是如果用戶不必輸入東西像「ctrl + f2」,而是點擊這些鍵。
這是否有任何Qt部件?
如果你需要Qt 4.x的組件,我已經實現了一個。三個關鍵部件:
小部件記錄多個快捷方式,就像設計師創造QKeySequence。快捷方式可以通過Delete或Backspace清除。
#define MAX_SHORTCUTS 3
QString ShortcutLineEdit::keyEventToString(QKeyEvent *e)
{
int keyInt = e->key();
QString seqStr = QKeySequence(e->key()).toString();
if (seqStr.isEmpty() ||
keyInt == Qt::Key_Control ||
keyInt == Qt::Key_Alt || keyInt == Qt::Key_AltGr ||
keyInt == Qt::Key_Meta ||
keyInt == Qt::Key_Shift)
{
return "";
}
QStringList sequenceStr;
if (e->modifiers() & Qt::ControlModifier)
sequenceStr << "Ctrl";
if (e->modifiers() & Qt::AltModifier)
sequenceStr << "Alt";
if (e->modifiers() & Qt::ShiftModifier)
sequenceStr << "Shift";
if (e->modifiers() & Qt::MetaModifier)
sequenceStr << "Meta";
return sequenceStr.join("+") + (sequenceStr.isEmpty() ? "" : "+") + seqStr;
}
void ShortcutLineEdit::keyPressEvent(QKeyEvent *e)
{
QString text =text();
int keyInt = e->key();
bool modifiers = e->modifiers() & (Qt::ControlModifier | Qt::ShiftModifier | Qt::AltModifier | Qt::MetaModifier);
if (!modifiers && (keyInt == Qt::Key_Delete || keyInt == Qt::Key_Backspace)) {
setText("");
return;
}
QString sequenceStr = keyEventToString(e);
if (sequenceStr == "") {
QLineEdit::keyPressEvent(e);
return;
}
if (text.split(", ").size() >= MAX_SHORTCUTS)
text = "";
if (!text.isEmpty())
text += ", ";
setText(text + sequenceStr);
}
void ShortcutLineEdit::apply()
{
QList<QKeySequence> sequenceList;
QStringList sequenceStrList = text().split(", ");
foreach (QString str, sequenceStrList)
sequenceList << QKeySequence(str);
// use sequenceList somehow
}
使用QKeySequenceEdit,從Qt 5.2開始可用。它允許您像Qt設計器一樣記錄快捷鍵。
不幸的是,Qt5在大多數Linux發行版上都受到很嚴重的支持(AFAIK ubuntu和debian甚至沒有在默認回購版中) – Petr 2015-02-23 09:40:56