Как обнаружить клавишу-модификатор по щелчку мыши в Qt - PullRequest
27 голосов
/ 23 июня 2010

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

Ответы [ 5 ]

30 голосов
/ 23 июня 2010

Попробуйте QApplication :: keyboardModifiers () , которая всегда доступна

В Qt 5 попробуйте QGuiApplication :: keyboardModifiers () .

7 голосов
/ 23 июня 2010

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

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

6 голосов
/ 02 сентября 2014

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

if(QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier))
{
    // Do a few things
}
4 голосов
/ 23 июня 2010

это действительно раздражает, я должен установить 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);
}
3 голосов
/ 18 октября 2013

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

if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == true) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...