未捕获QT事件筛选器中的键盘快捷键(强制文本为大写)
Not capturing keyboard shortcut keys in QT event filter (that forces text to upper case)
在Qt 5.6中,我设置了一个事件过滤器,强制用户在QLineEdits和QTextEdits中输入的文本为大写
上下文菜单功能(复制、粘贴)有效,但键盘快捷键无效。
似乎我也捕捉到了控制移位的字母(ctrl-C,ctrl-V等)
我没有做什么来排除控制移位的键,以便它们得到正常处理?
下面的代码段。
bool Form::eventFilter(QObject *obj, QEvent *event)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
if(keyEvent->key() >= Qt::Key_A && keyEvent->key() <= Qt::Key_Z &&
((keyEvent->modifiers() & Qt::ShiftModifier) == false))
{
QApplication::sendEvent(obj, new QKeyEvent(QEvent::KeyPress,
keyEvent->key(), keyEvent->modifiers() | Qt::ShiftModifier,
keyEvent->text().toUpper()));
QApplication::sendEvent(obj, new QKeyEvent(QEvent::KeyRelease,
keyEvent->key(), keyEvent->modifiers() | Qt::ShiftModifier,
keyEvent->text().toUpper()));
return true;
}else return false;
}
return false;
}
由于QT事件筛选器,我的代码使UI程序不会捕获键盘快捷键(强制文本大写)。为什么?
请注意,有Qt::ControlModifier
标志来强制过滤器:
(keyEvent->modifiers() & (Qt::ShiftModifier | Qt::ControlModifier)) == false
此外,在您的代码示例中,我怀疑调用父类事件过滤器将通过防止其他不必要的影响来帮助解决问题:
// for all other cases, let it process then
return QWidget::eventFilter(obj, e);
但我会使用指定的keyPressEvent
过载功能:
void MyWidget::keyPressEvent(QKeyEvent *e) override
{
// filtering keypress modifiers as well
// use your own key codes here
if ((e->key() == Qt::Key_Z) &&
! e->modifiers() & (Qt::ShiftModifier | Qt::ControlModifier))
{
// just an example to handle 'Z' pressed
// with no control modifiers
e->accept(); // set as 'handled here'
return;
}
e->ignore(); // set as 'not handled here'
}
这不是你问题的答案,但可以找到类似的解决方案:我可以简化qt的以下代码吗?我认为后者更好,因为不涉及通过事件循环发送密钥也许使用文本编辑验证器是更好的解决方案,但我有疑问。没有什么是新的:这样的解决方案,但也针对不同的问题
相关文章:
- 如何覆盖Windows键盘快捷键
- 如何在子类化控件中使用快捷键表?
- 是否有任何快捷键可以插入函数的定义
- C++ i+=1 的快捷键到 i=i+1
- 菜单打开时,菜单中的C QT操作不会由键盘快捷键触发
- 多个快捷键不起作用
- 在Ubuntu中翻译快捷键
- C++QT OSX QT::META+QT:键_Tab快捷键绑定
- 未捕获QT事件筛选器中的键盘快捷键(强制文本为大写)
- QPushButton的全局快捷键
- 记事本++将快捷键"alt+æ"分配给突击队
- 如何处理AES_set_encrypt_key快捷键
- 是否可以在Qt中使用带下划线的字母作为键盘快捷键
- C++ 快捷键不起作用
- Qt将非菜单栏键盘快捷键添加到QMainWindow
- 热键,快捷键和加速键有什么区别
- EclipseCDT-键盘快捷键或插件,用于从编译错误中创建新的类和方法
- Qt:Qt应用程序中的键盘快捷键分配(使用"&")是否不适用于Mac OSX?
- C++Qt Q带数字键盘键的快捷键
- 在按钮文本中带下划线快捷键的工具栏