如何在Qt中单击鼠标检测修改键

时间:2010-06-23 08:35:00

标签: qt

我有一个QTableWidget,希望按下CTRL,同时点击列标题会标记整列。获取列索引不是问题,因为有一个 sectionPressed 信号,它给出了单击列的当前索引。如何在单击列时获取任何键盘修饰符的状态?

5 个答案:

答案 0 :(得分:30)

尝试始终可用的QApplication::keyboardModifiers()

在Qt 5上,试试QGuiApplication::keyboardModifiers()

答案 1 :(得分:7)

  

键盘修饰键的状态可以通过调用从QInputEvent继承的modifiers()函数找到。

http://doc.qt.io/qt-5/qmouseevent.html

答案 2 :(得分:6)

您可以使用更简单的QGuiApplication::queryKeyboardModifiers()

if(QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier))
{
    // Do a few things
}

答案 3 :(得分:4)

这真烦人,我必须安装eventFilter并删除 sectionPressed 处理程序

ui->tableWidget->horizontalHeader()->viewport()->installEventFilter(this);

在eventFilter中,我可以检查按键是否按下了

bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
    if(event->type() == QEvent::MouseButtonPress)
    {
        if(Qt::ControlModifier == QApplication::keyboardModifiers())
        {
            QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
            if(mouseEvent)
            {
                if(mouseEvent->button()== Qt::LeftButton)
                {
                    ui->tableWidget->selectColumn(ui->tableWidget->itemAt(mouseEvent->pos())->column());
                    return true;
                }
            }
        }
    }

    return QWidget::eventFilter(object,event);
}

答案 4 :(得分:3)

这适合我。

if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == true) {