考虑这种情况:
对于小部件上的按钮:如果在通过显式调用 隐藏()
?
例如,假设有一个计时器,在它的timeout()
槽中,widget.hide()
被调用。巧合的是,用户点击按钮的同时时间到了。
问题是:按钮的 clicked()
槽是否有可能在计时器的 timeout()
槽(它隐藏了包含按钮的小部件)之后被调用?
最佳答案
不,同步的主线程尊重 GUI 操作,所以你不能在用户点击的同时改变主线程中对象的可见性(比如你的 QPushButton
)在上面。此外,除非您使用的是具有不同事件循环的多线程应用程序,否则您的 QTimer
也将在主线程中处理,因此它是同步的 UI。简而言之:您可能会得到毫秒级的同步(在隐藏它之前立即单击),但不是真正的并行性。
如果你关心这个,也许你可以在实际处理点击之前设置一个小的延迟,只是为了检查按钮是否被点击但立即隐藏。在这种情况下,您可以忽略用户输入,但这会造成混淆。另一种选择是在单击按钮时延迟隐藏按钮,这样用户就不会得到错误的视觉反馈。
关于c++ - QT中鼠标事件是如何传递给widget的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46150493/