私はテキストベースのやることプログラムを実装しています。から継承するCommandInput
ウィジェットがありますQLineEdit
。基本的に、「追加」、「削除」、「編集」などのキーワードで始まるコマンドがいくつかあります。
いくつかのショートカットを実装したいと思います。
Ctrl+A
ウィジェットにフォーカスがあるときに、setText("add \"\"")
最後から2番目の位置にカーソルを置くことができるようにします。add "|"
Tab
ウィジェットにフォーカスがあるとき、たとえばユーザーが最初のキーワードを入力したときに、次add
のコマンドを完了することができます。add "|"
重要な問題は、ウィジェットにフォーカスがある場合、ショートカットが機能しないことです。私は次の方法を試しました:
1/オーバーライドkeyPressEvent
。キーが意図したTab
とおりに機能しません。そして、それが機能したとしても、のようなkeySequenceに対してそれを行う方法がわかりません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()));
}
この問題について私を助けていただければ幸いです。ありがとう!