c++ - QT中鼠标事件是如何传递给widget的

标签 c++ qt

考虑这种情况:

对于小部件上的按钮:如果在通过显式调用 隐藏()

例如,假设有一个计时器,在它的timeout() 槽中,widget.hide() 被调用。巧合的是,用户点击按钮的同时时间到了。

问题是:按钮的 clicked() 槽是否有可能在计时器的 timeout() 槽(它隐藏了包含按钮的小部件)之后被调用?

最佳答案

不,同步的主线程尊重 GUI 操作,所以你不能在用户点击的同时改变主线程中对象的可见性(比如你的 QPushButton)在上面。此外,除非您使用的是具有不同事件循环的多线程应用程序,否则您的 QTimer 也将在主线程中处理,因此它是同步的 UI。简而言之:您可能会得到毫秒级的同步(在隐藏它之前立即单击),但不是真正的并行性。

如果你关心这个,也许你可以在实际处理点击之前设置一个小的延迟,只是为了检查按钮是否被点击但立即隐藏。在这种情况下,您可以忽略用户输入,但这会造成混淆。另一种选择是在单击按钮时延迟隐藏按钮,这样用户就不会得到错误的视觉反馈。

关于c++ - QT中鼠标事件是如何传递给widget的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46150493/

相关文章:

c++ - 在 C++ 中使用堆栈计算后缀表达式

c++ - 带派生类的 Qt 样式表

python - 导入错误 : cannot import name QtGui

c++ - 要下载哪个Qt?

c++ - 运行我的程序时 Directx 11 蓝屏死机

C++ Boost - 没有找到接受类型为 'boost::filesystem::path' 的右手操作数的运算符

c++ - 如何使用asm intel语法从c中的asm访问char?

linux - 使用命令行从多个 HTML 页面创建动画 gif

c++ - 如何使用 qmake 和 MinGW32 在 QtCreator 中链接动态库?

c++ - 如何验证用户输入的月份输入日期?