C++ 为什么总是在mouseDoubleClickEvent之前调用mousePressEvent 请考虑以下代码: #include <QWidget> #include <iostream> #include <QApplication> class Widget : public QWidget { public: void mousePressEvent(QMouseEvent* event) { std::cout << "mousePressEvent" < std::endl; } void mouseDoubleClickEvent(QMouseEvent* event) { std::cout << "mouseDoubleClickEvent" << std::endl; } }; int main(int argc, char** argv) { QApplication app(argc, argv); Widget w; w.show(); return app.exec(); }

C++ 为什么总是在mouseDoubleClickEvent之前调用mousePressEvent 请考虑以下代码: #include <QWidget> #include <iostream> #include <QApplication> class Widget : public QWidget { public: void mousePressEvent(QMouseEvent* event) { std::cout << "mousePressEvent" < std::endl; } void mouseDoubleClickEvent(QMouseEvent* event) { std::cout << "mouseDoubleClickEvent" << std::endl; } }; int main(int argc, char** argv) { QApplication app(argc, argv); Widget w; w.show(); return app.exec(); },c++,qt,events,double-click,mousepress,C++,Qt,Events,Double Click,Mousepress,这意味着Qt总是在一次按下时立即调用MousePresseEvent,而不必等待第二次按下。是否有方法关闭此选项,以便在双击时不会执行mousePressEvent调用 如它所说:mouseDoubleClickEvent的默认实现生成一个正常的鼠标按下事件 在qwidget.cpp中,您还可以找到注释 当用户双击小部件时,将调用mouseDoubleClickEvent()。如果用户双击,小部件将收到一个鼠标按下事件、一个鼠标释放事件、一个鼠标点击事件、一个第二次鼠标按下事件、这个事件以及最后

这意味着Qt总是在一次按下时立即调用MousePresseEvent,而不必等待第二次按下。是否有方法关闭此选项,以便在双击时不会执行mousePressEvent调用

如它所说:
mouseDoubleClickEvent
的默认实现生成一个正常的鼠标按下事件

qwidget.cpp
中,您还可以找到注释

当用户双击小部件时,将调用mouseDoubleClickEvent()。如果用户双击,小部件将收到一个鼠标按下事件、一个鼠标释放事件、一个鼠标点击事件、一个第二次鼠标按下事件、这个事件以及最后一个第二次鼠标释放事件


为什么不在每个事件函数中增加一个呢?在双击的情况下,计数器将增加两倍1

一个更通用的解决方案:通过减去它所加的值(也可以是负数),消除
mousePressEvent所做的更改

singleClickStep
doubleClickStep
是每种情况下递增计数器的值


Vahancho的答案解决了单次单击无法撤消的情况,但是
QApplication::doubleClickInterval()
可能太长。另一方面,在我的解决方案中,您已经可以看到小部件上第一次和第二次单击之间的值。

我将在与
QApplication::doubleClickInterval()
值相等的时间段内绕过对单次单击事件的处理(使用
QTimer
)。如果在这段时间内没有双击,我应该处理“单次单击”,否则应该处理双击。

Qt如何预测您是否也将始终单击第二次?你想解决什么样的问题?我有一些计数器,如果双击,我必须将它增加2,如果单击一次,则增加1。在本例中,我找到了一个解决方法,并且每次递增一次。正如我之前在一条评论中提到的,我按照您提到的那样做了。我只是想避开鼠标按键的召唤。如果mu程序在一次单击的情况下执行一次登录,而在双击的情况下执行另一次登录,该怎么办。在这种情况下,两个函数都被调用..为什么不使用counter+=singleClickStep();在这两种情况下?@Eduard Rostomyan这(也)适用于您提到的情况,您可以递增/递减,因此
singleClickStep
返回1,而
doubleClickStep
返回-1。
mousePressEvent
mouseDoubleClickEvent
void mousePressEvent(QMouseEvent* event)
{
    counter += singleClickStep;
}

void mouseDoubleClickEvent(QMouseEvent* event)
{
    counter -= singleClickStep;
    counter += doubleClickStep;
}