如何检测修改键在Qt中的鼠标点击
我有一个QTableWidget
,并希望按下CTRL,同时点击列标题标记整个列。要获得列索引不是问题,因为有一个sectionPressed信号,它给了我点击的列的当前索引。如何在单击列时获取键盘修饰符的状态?如何检测修改键在Qt中的鼠标点击
可以通过调用从QInputEvent继承的modifiers()函数来找到键盘修饰键的状态。
我知道,但我有关联的插槽内没有对象sectionPressed其他则列索引。没有事件,没有发件人,没有。 – tfl 2010-06-23 08:50:04
也许你可以在mouseReleaseEvent中保存修饰符状态,这应该发生在信号之前。 – 2010-06-23 09:11:35
这实在是烦人,我必须安装一个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) {
您可以使用QGuiApplication::queryKeyboardModifiers()
这是更简单的使用方法:
if(QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier))
{
// Do a few things
}
我发现了这一切 – tfl 2010-06-24 05:29:40
现在我偶然发现了这个答案!在我把所有东西都改写成凌乱的子类之后,我就可以看到事件对象:-)哦,哦! – 2013-05-02 17:38:55
与@Freedom_Ben类似,我也在查看所有提示子类或事件过滤器的示例......但是由于我的持久性(可能是懒惰:P),我找到了这个答案。像魅力一样......就像我想要的一样!感谢Roku的帮助! – zeFree 2013-05-09 06:13:16