如何检测Qt中是否按下了两个鼠标按钮?

时间:2013-11-21 09:18:30

标签: c++ qt mouseevent

现在我能够检测到何时只点击了一个按钮。但我想检测两者何时被压在一起。目的是从QTableView中选择一些项目。我试图以这样一种方式选择它们:当一个项目上的左键被按下而右按钮已被按下时,该项目将被选中。

以下代码仅显示单击右键的消息,但未显示两个按钮均已单击。如何设置检测何时单击它们?

bool MainWindow::eventFilter(QObject* obj, QEvent *ev)
{
    if(obj = ui->listOfImages->viewport())
    {
        QMouseEvent * mouseEv = static_cast<QMouseEvent*>(ev);
        if(mouseEv->buttons() == Qt::RightButton)
        {
            qDebug()<<"Right Button clicked!";
            if(mouseEv->buttons() == Qt::LeftButton)
            {
                qDebug()<<"Both button clicked!";
                return QObject::eventFilter(obj,ev);
            }
        }
    }
    return QObject::eventFilter(obj,ev);
}

感谢。

2 个答案:

答案 0 :(得分:7)

尝试

if( (mouseEv->buttons() & Qt::RightButton) &&
    (mouseEv->buttons() & Qt::LeftButton) )
{
...
}

提示:

当你刚刚检查过按钮()等于Qt :: RightButton时,它怎么能等于Qt :: LeftButton?

答案 1 :(得分:6)

QMouseEvent :: buttons()函数返回鼠标按钮的OR状态组合。 因此,要测试按下左键,您应该这样做: -

if(mouseEv->buttons() & Qt::LeftButton)

和右键: -

if(mouseEv->buttons() & Qt::RightButton)

正如Qt文档所述: -

  

对于鼠标按下和双击事件,这包括导致事件的按钮。对于鼠标释放事件,这会排除导致事件发生的按钮。

因此,您可以跟踪按下和释放按钮的时间。