我正在实施一个基于文本的待办事项程序。我有一个CommandInput
继承自QLineEdit
. 基本上有一些命令,以关键字“add”、“delete”、“edit”等开头。
我想实现一些快捷方式。
Ctrl+A
这样当小部件有焦点时,我可以将setText("add \"\"")
光标放在倒数第二个位置,所以它看起来是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()));
}
希望你能在这个问题上帮助我。谢谢!