如何检测两个鼠标按钮是否在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的文档状态: -
对于鼠标按下和双击事件,这包括导致事件的按钮。对于鼠标释放事件,这排除了导致该事件的按钮。
因此,您可以跟踪按钮何时按下并释放。
答
尝试
if((mouseEv->buttons() & Qt::RightButton) &&
(mouseEv->buttons() & Qt::LeftButton))
{
...
}
提示:
当你刚检查按钮()等于Qt的:: RightButton,怎么会等于Qt的:: LeftButton?
+0
谢谢,它的作品。对不起,我不能接受你的,因为梅林是最早的。 :(但我已经投票给你,你们很棒:)。 –
谢谢,它的工作原理。我会接受你的,因为你是最早的。 :) –