Ответ 1
Попробуйте QApplication:: keyboardModifier(), который всегда доступен
В Qt 5 попробуйте QGuiApplication:: keyboardModifiers().
У меня есть QTableWidget
и хотел бы, чтобы нажатие CTRL при нажатии на заголовок столбца помешало весь столбец. Получить индекс столбца не является проблемой, так как есть разделПредусмотренный сигнал, который дает мне текущий индекс щелкнутого столбца. Как я могу получить состояние каких-либо модификаторов клавиатуры при щелчке по столбцу?
Попробуйте QApplication:: keyboardModifier(), который всегда доступен
В Qt 5 попробуйте QGuiApplication:: keyboardModifiers().
Состояние клавиш-модификаторов клавиатуры можно найти, вызвав функцию modifiers(), унаследованную от QInputEvent.
Это действительно раздражает, я должен установить 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);
}
Вы можете использовать QGuiApplication::queryKeyboardModifiers()
, который проще использовать:
if(QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier))
{
// Do a few things
}
Это работает для меня.
if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == true) {