gpt4 book ai didi

c++ - QLineEdit 处于焦点时无法设置快捷方式

转载 作者:太空狗 更新时间:2023-10-29 23:07:17 26 4
gpt4 key购买 nike

我正在实现一个基于文本的待办事项程序。我有一个 CommandInput 小部件,它继承自 QLineEdit。基本上有一些命令,以关键字“添加”、“删除”、“编辑”等开头。

我想实现一些快捷方式。

  1. Ctrl+A 这样当小部件获得焦点时,我可以 setText("add\"\"") ,光标在倒数第二个位置,所以它似乎是 add "|"
  2. Tab 以便当小部件获得焦点时,当用户输入第一个关键字时,例如 add,然后我可以完成命令到 添加“|”

关键问题是,当小部件获得焦点时,快捷方式不起作用。我尝试了以下方法:

1/覆盖 keyPressEventTab 键无法按预期工作。即使它有效,我也不知道如何为 Ctrl+A 之类的 keySequence 执行此操作。

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 可能是这里的首选方法。我猜测“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) 机器。

关于c++ - QLineEdit 处于焦点时无法设置快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13255061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com