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

问题描述:

现在我可以检测到只有一个按钮被点击。但是我想要检测两者是否被压在一起。目的是从QTableView中选择一些项目。我试图以这样一种方式选择它们,当左键单击某个项目时,右键已经保持按下,则该项目将在选中状态。如何检测两个鼠标按钮是否在Qt中按下?

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

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()函数返回鼠标按钮的OR'd状态的组合。 因此,要测试左键被按下时,你应该这样做: -

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

和右边的按钮: -

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

由于Qt的文档状态: -

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

因此,您可以跟踪按钮何时按下并释放。

+1

谢谢,它的工作原理。我会接受你的,因为你是最早的。 :) –

尝试

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

提示:

当你刚检查按钮()等于Qt的:: RightButton,怎么会等于Qt的:: LeftButton?

+0

谢谢,它的作品。对不起,我不能接受你的,因为梅林是最早的。 :(但我已经投票给你,你们很棒:)。 –