【发布时间】:2016-10-28 14:57:42
【问题描述】:
在我的应用程序中,有几个QPushButtons 我需要以不同方式处理“无效释放”和“单击”。
“无效释放”是指在按钮外发生的释放(在按钮内按下之后)。
所以我尝试从QPushButton 继承并实现我自己的信号void released(bool validClick);。
我正在考虑使用mouseReleaseEvent 检查它是否在按钮的rect() 中,以推断clicked() 信号是否会跟随released() 信号。这是一个好方法吗?
更新::背景:
我有一组三个按钮,每个按钮都可以向后端启动相同的操作(具有不同的配置)。但是,如果没有清理已经启动的命令,后端无法处理多个连续的启动命令,所以我必须在按钮组中防止这种情况。
这个应用程序是多点触控的,这使得同时点击所有三个按钮变得非常容易。
我想做什么:
1) 当其中一个按钮被按下时,禁用其他按钮。这是必不可少的,因为这是一个多点触控 GUI,同时单击多个按钮是我需要避免的第一件事。
2) 当后端通知按钮组之前启动的所有服务都已关闭并清理完毕并准备好单击下一个按钮时,按钮组解锁所有按钮。
3) 如果用户触发了无效释放(按下按钮,向外释放),所有按钮应立即解锁。
4)如果用户触发了有效的释放(点击),按钮组也应该禁用用户点击过的按钮,以便在后端允许之前不能再次点击。
如果我不能区分有效和无效释放,那么我将不得不以与案例 3) 相同的方式处理案例 4) 和案例 2)。这是不可取的。
【问题讨论】:
-
无效版本需要做什么?
-
@ddriver 请在问题中查看我的更新。
-
听起来太复杂了。使用 clicked() 而不是 release() 来处理“无效释放”并处理来自被调用者内部的多个触发器。让他在完成之前拒绝任何开始。