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

the*_*ive 1 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);
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

小智 7

尝试

if( (mouseEv->buttons() & Qt::RightButton) &&
    (mouseEv->buttons() & Qt::LeftButton) )
{
...
}
Run Code Online (Sandbox Code Playgroud)

暗示:

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


The*_*ght 6

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

if(mouseEv->buttons() & Qt::LeftButton)
Run Code Online (Sandbox Code Playgroud)

并为正确的按钮: -

if(mouseEv->buttons() & Qt::RightButton)
Run Code Online (Sandbox Code Playgroud)

正如Qt文档所述: -

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

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