我有一个
QTableWidget
,希望在单击列标题时按 Ctrl 标记整个列。
获取列索引不是问题,因为有一个
sectionPressed
信号,它为我提供了单击的列的当前索引。
单击列时如何获取任何键盘修饰符的状态?
如果您想通过鼠标单击事件了解修饰键状态,可以使用 QGuiApplication::keyboardModifiers() 它将检索上次鼠标事件期间的键状态:
if(QGuiApplication::keyboardModifiers().testFlag(Qt::ControlModifier)) {
// Do a few things
}
否则,如果您想显式查询修饰符状态,您应该使用 QGuiApplication::queryKeyboardModifiers()。这在其他用例中可能是必需的,例如在应用程序启动期间检测修饰键。
可以通过调用继承自QInputEvent的modifiers()函数来找到键盘修饰键的状态。
我必须安装
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);
}
if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == true) {