我有一个QTableWidget
,希望按下CTRL,同时点击列标题会标记整列。获取列索引不是问题,因为有一个 sectionPressed 信号,它给出了单击列的当前索引。如何在单击列时获取任何键盘修饰符的状态?
答案 0 :(得分:30)
尝试始终可用的QApplication::keyboardModifiers()
在Qt 5上,试试QGuiApplication::keyboardModifiers()。
答案 1 :(得分:7)
键盘修饰键的状态可以通过调用从QInputEvent继承的modifiers()函数找到。
答案 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) {