[英]How to implement shortcut input box in Qt
在像qtcreator這樣的軟件中,您可以看到以下內容:
基本上是一些單擊時要求您按下某種鍵盤組合以記錄快捷方式的框。
如何在Qt中創建類似的內容? 到目前為止,我只能使用常規文本框來實現此目的,在常規文本框中,用戶必須自己鍵入組合,並且如果顯示的消息框不正確,則如果用戶不必鍵入內容,它將更加簡單。就像“ Ctrl + F2”一樣,而是單擊這些鍵。
是否有任何Qt小部件?
使用QKeySequenceEdit (從Qt 5.2開始可用)。 它允許您像在Qt Designer中一樣記錄快捷鍵。
如果您需要Qt 4.x的小部件,我以前已經實現了。 三個關鍵部分是:
小部件記錄了多個快捷方式,例如在Designer中。 快捷鍵可以通過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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.