2012-11-06 90 views
3

我正在實施基於文本的待辦事宜程序。我有一個CommandInput小部件,它繼承自QLineEdit。基本上有幾個命令,從關鍵字「添加」,「刪除」,「編輯」等等開始。QLineEdit無法在焦點位置設置快捷方式

我想實現一些快捷方式。

  1. Ctrl+A使得當插件具有焦點,我可以setText("add \"\""),光標在所述第二最後的位置,因此它似乎是add "|"
  2. Tab使得當插件具有焦點,當用戶鍵入第一個關鍵詞,例如,add,那麼我就可以完成命令add "|"

關鍵的問題是,當小部件具有焦點,快捷方式不工作。我試過以下方法:

1 /覆蓋keyPressEventTab密鑰不能按預期工作。即使它起作用,我也不知道如何爲像Ctrl+A這樣的密鑰序列做到這一點。

void CommandInput::keyPressEvent(QKeyEvent *keyEvent) 

{ 
    switch(keyEvent->key()) 
    { 
    case Qt::Key_Tab; 
     emit add_activated(); 
    default: 
     QLineEdit::keyPressEvent(keyEvent); 
    } 
} 

2 /在初始化時創建快捷方式。這也不起作用。

CommandInput::CommandInput(QWidget *parent) 
    : QLineEdit(parent) 
{ 
    tab_shortcut = new QShortcut(QKeySequence("Tab"),this); 
    add_shortcut = new QShortcut(QKeySequence("Ctrl+A"),this); 

    connect(tab_shortcut, SIGNAL(activated()), 
      this, SIGNAL(tab_activated())); 
    connect(add_shortcut, SIGNAL(activated()), 
      this, SIGNAL(add_activated())); 
} 

希望你能幫我解決這個問題。謝謝!

回答

1

覆蓋keyPressEvent可能是此處的首選方法。我猜測「Tab」不能按預期工作的原因是因爲在發佈add_activated()之後沒有break聲明。對於「Ctrl + A」,您必須查看關鍵事件的modifiers()。因此,您的keyPressEvent會是這個樣子:

void CommandInput::keyPressEvent(QKeyEvent* keyEvent) 
{ 
    if (keyEvent->key() == Qt::Key_Tab) 
    { 
     emit add_activated(); 
    } 
    else if (keyEvent->key() == Qt::Key_A && 
      keyEvent->modifiers() == Qt::ControlModifier) 
    { 
     // Code for Ctrl+A goes here. 
    } 
    else 
    { 
     QLineEdit::keyPressEvent(keyEvent); 
    } 
} 

這似乎是我的(Linux)的機器上工作。

+0

非常感謝你!!!!!!所有組合鍵現在都在工作。儘管「Tab」仍然不起作用,但我選擇使用LeftQuotation替代方法。謝謝!=) –