【问题标题】:How to detect if both mouse buttons are pressed in Qt?如何检测 Qt 中是否按下了两个鼠标按钮?
【发布时间】:2013-11-21 09:18:30
【问题描述】:

现在我能够检测到何时只单击了一个按钮。但我想检测两者何时被压在一起。目的是从 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);
}

谢谢。

【问题讨论】:

    标签: c++ qt mouseevent


    【解决方案1】:

    试试

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

    提示:

    刚检查buttons()等于Qt::RightButton,怎么会等于Qt::LeftButton呢?

    【讨论】:

    • 谢谢,它有效。对不起,我不能接受你的,因为梅林是最早的。 :( 但我要投你的票,你们太棒了:)。
    【解决方案2】:

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

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

    对于右键:-

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

    正如 Qt 文档所述:-

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

    这样您就可以跟踪何时按下和释放按钮。

    【讨论】:

    • 谢谢,它有效。我会接受你的,因为你是最早的。 :)
    猜你喜欢
    • 2013-05-21
    • 2013-02-25
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2015-10-30
    • 1970-01-01
    相关资源
    最近更新 更多