QLineEdit 在焦点中时无法设置快捷方式
QLineEdit could not set shortcuts when it's in focus
我正在实现基于文本的待办事项程序。我有一个CommandInput
小部件,该小部件从QLineEdit
继承。基本上有几个命令,从关键字" add"," delete"," edit"和几个命令开始。
我想实现一些快捷方式。
-
Ctrl+A
因此,当小部件有焦点时,我可以在第二个位置的setText("add """)
,即光标,因此它似乎是add "|"
-
Tab
因此,当小部件有焦点时,当用户在第一个关键字中键入add
时,我可以将命令完成到add "|"
关键问题是,当小部件具有焦点时,快捷方式就无法正常工作。我尝试了以下方式:
1/覆盖keyPressEvent
。Tab
密钥无法按预期工作。即使有效,我也不知道如何为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()));
}
希望您可以在这个问题上帮助我。谢谢!
覆盖keyPressEvent
可能是这里的首选方法。我猜测"选项卡"不按预期工作的原因是因为发射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)机器上工作。
为了使Tab键正常工作,我必须在Event()中捕获KeyPressevent,如这样:
bool MyQTextBox::event(QEvent* event) {
if (event->type() == QEvent::KeyPress) { // this did the trick for me
this->keyPressEvent(dynamic_cast<QKeyEvent*>(event));
return true;
}
return QWidget::event(event);
}
相关文章:
- 如何在c++中为模板函数实例创建快捷方式
- C++ ->运算符 [] 的快捷方式
- C++结构模板变量快捷方式定义不起作用
- 用于基于成员字段或函数创建比较器的快捷方式
- c++ Visual Studio 2015 快捷方式,用于从选择代码中生成功能
- 是否有用于"go to variable type definition" C++中"auto"变量的 Visual Studio 键盘快捷方式?
- Qt全局快捷方式扩展劫持快捷方式
- 在Qt Creator中应用代码更改的快捷方式是什么?
- 是否有快捷方式重叠运算符?
- 使用 C++ 显示 (.lnk) 快捷方式文件的真实路径
- 一个按钮有两个或多个快捷方式
- 通过TranslateAccelerator检测快捷方式时,忽略Shift键的状态
- 无论如何,是否可以确定MFC应用程序是通过PC重新启动或用户单击应用程序快捷方式开始的
- QDIR入口列表可以使用文件夹快捷方式透明地工作
- 快捷方式在C 中编写自定义编译命令时
- 自动热键:重新映射 MS Visio 的快捷方式,以将手动选择的对象对齐到顶部(好像按:"AlignTop")
- 如何为 QT Windows 应用程序设置不同的桌面快捷方式图标和任务栏图标不同
- 为什么 cppreference 将type_traits xxx_v快捷方式定义为内联 constexpr,而不仅仅是
- QACTION快捷方式无法将空间设置为热键
- QLineEdit 在焦点中时无法设置快捷方式