我试图了解如何使用Qt处理各种事件,并找到了一个我无法理解的关键修饰符问题,例如 Ctrl Shift Alt 等我在Qt Creator中创建了一个默认的Qt GUI应用程序,扩展了QMainWindow并发现以下示例不会产生可理解的结果
void MainWindow::keyPressEvent(QKeyEvent *event)
{
qDebug() << "Modifier " << event->modifiers().testFlag(Qt::ControlModifier);
qDebug() << "Key " << event->key();
qDebug() << "Brute force " << (event->key() == Qt::Key_Control);
}
当暴力方法返回正确的值时,对事件使用modifiers()函数永远不会成立。
我做错了什么?
答案 0 :(得分:20)
尝试使用它来检查班次:
if(event->modifiers() & Qt::ShiftModifier){...}
这是为了检查控制:
if(event->modifiers() & Qt::ControlModifier){...}
等等。这对我很有用。
编辑:
要获取wheel事件的修饰符,您需要检查传递给QWheelEvent
方法的wheelEvent()
对象:
void MainWindow::wheelEvent( QWheelEvent *wheelEvent )
{
if( wheelEvent->modifiers() & Qt::ShiftModifier )
{
// do something awesome
}
else if( wheelEvent->modifiers() & Qt::ControlModifier )
{
// do something even awesomer!
}
}
答案 1 :(得分:6)
根据文档,QKeyEvent::modifiers
不能始终被信任。请尝试使用QApplication::keyboardModifiers()
静态函数。
来自Qt 5 Doc. – Qt::KeyboardModifiers QKeyEvent::modifiers() const:
警告:此功能无法始终信任。例如,用户可以同时按下 Shift 键并释放其中一个来混淆它。