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

How to detect if both mouse buttons are pressed in Qt?

本文关键字:鼠标 两个 按钮 检测 何检测 是否 Qt      更新时间:2023-10-16

现在我可以检测何时只点击了一个按钮。但我想检测两者何时压在一起。其目的是从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);
}

谢谢。

尝试

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

提示:

当你刚刚检查buttons()等于Qt::RightButton时,它怎么会等于Qt:::LeftButton?

QMouseEvent::buttons()函数返回鼠标按钮的OR状态组合。因此,要测试左侧按钮是否按下,您应该这样做:-
if(mouseEv->buttons() & Qt::LeftButton)

对于右侧按钮:-

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

正如Qt文档所述:-

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

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