现在,我能够检测到何时仅单击一个按钮。但是我想检测一下两者是否同时按下。目的是从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);
}

谢谢。

最佳答案

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

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

并为右键:-
if(mouseEv->buttons() & Qt::RightButton)

正如Qt docs所述:-



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

10-04 21:15