Подтвердить что ты не робот

Как определить ключ модификатора при щелчке мыши в Qt

У меня есть QTableWidget и хотел бы, чтобы нажатие CTRL при нажатии на заголовок столбца помешало весь столбец. Получить индекс столбца не является проблемой, так как есть разделПредусмотренный сигнал, который дает мне текущий индекс щелкнутого столбца. Как я могу получить состояние каких-либо модификаторов клавиатуры при щелчке по столбцу?

4b9b3361

Ответ 2

Состояние клавиш-модификаторов клавиатуры можно найти, вызвав функцию modifiers(), унаследованную от QInputEvent.

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

Ответ 3

Это действительно раздражает, я должен установить eventFilter и удалить разделПредусмотренный обработчик

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

Вы можете использовать QGuiApplication::queryKeyboardModifiers(), который проще использовать:

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

Ответ 5

Это работает для меня.

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