2015-02-23 76 views
1

在軟件,如qtcreator你可以看到這樣的事情:如何實現快捷輸入框在Qt的

enter image description here

基本上一些框點擊它時,請您按以記錄快捷方式某些鍵盤組合。

我該如何在Qt中創建類似的東西?到目前爲止,我只能使用一個常規文本框來實現這一點,用戶必須自己輸入組合,如果出現不正確的消息框,但是如果用戶不必輸入東西像「ctrl + f2」,而是點擊這些鍵。

這是否有任何Qt部件?

回答

3

如果你需要Qt 4.x的組件,我已經實現了一個。三個關鍵部件:

  1. 讀取用戶輸入
  2. 將其轉換爲人類可讀的字符串
  3. 使用字符串

小部件記錄多個快捷方式,就像設計師創造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 
} 
3

使用QKeySequenceEdit,從Qt 5.2開始可用。它允許您像Qt設計器一樣記錄快捷鍵。

+0

不幸的是,Qt5在大多數Linux發行版上都受到很嚴重的支持(AFAIK ubuntu和debian甚至沒有在默認回購版中) – Petr 2015-02-23 09:40:56