现在我能够检测到何时只点击了一个按钮。但我想检测两者何时被压在一起。目的是从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);
}
感谢。
答案 0 :(得分:7)
尝试
if( (mouseEv->buttons() & Qt::RightButton) &&
(mouseEv->buttons() & Qt::LeftButton) )
{
...
}
提示:
当你刚刚检查过按钮()等于Qt :: RightButton时,它怎么能等于Qt :: LeftButton?
答案 1 :(得分:6)
QMouseEvent :: buttons()函数返回鼠标按钮的OR状态组合。 因此,要测试按下左键,您应该这样做: -
if(mouseEv->buttons() & Qt::LeftButton)
和右键: -
if(mouseEv->buttons() & Qt::RightButton)
正如Qt文档所述: -
对于鼠标按下和双击事件,这包括导致事件的按钮。对于鼠标释放事件,这会排除导致事件发生的按钮。
因此,您可以跟踪按下和释放按钮的时间。