在我的应用程序中,我需要处理一些QPushButton
"无效释放"和"点击"不同。
"无效释放"我的意思是在按钮外发生的释放(按下按钮后)。
所以我试图继承QPushButton
并实施我自己的信号void released(bool validClick);
。
我正在考虑使用mouseReleaseEvent
检查按钮的rect()
中是否有clicked()
来跟踪released()
信号是否会跟随read.table
{1}}信号。这是一个很好的方法吗?
更新::背景
我有一组三个按钮,每个按钮可以向后端启动相同的动作(具有不同的配置)。然而,后端无法处理多个连续的启动命令而没有已经启动的启动命令,因此我必须在按钮组中防止这种情况。
此应用程序是多点触控,可以很容易地同时点击所有三个按钮。
我想做什么:
1)按下其中一个按钮时,禁用其他按钮。这是必不可少的,因为这是一个多点触摸GUI,同时点击多个按钮是我需要避免的第一件事。
2)当后端通知按钮组所有先前启动的服务已关闭并清理完毕并且已准备好进行下一次按钮点击时,按钮组会解锁所有按钮。
3)如果用户触发无效释放(按下按钮,在其外面释放),应立即解锁所有按钮。
4)如果用户触发有效释放(单击),则按钮组还应禁用用户单击的按钮,以便在后端允许之前不能再次单击该按钮。
如果我无法区分有效和无效的版本,那么我将不得不像案例3那样处理案例4)和案例2)。这是不可取的。
答案 0 :(得分:1)
您不关心按下或发布,只关注后端完成任务的点击和指示。你有两种状态:闲置和忙碌。空闲时,启用按钮。当任何按钮为clicked()
时,您将转换到忙碌状态,直到后端发出信号表示它不再忙。使用状态机框架实现这一点很简单。
您还可以使用三种状态来简化故障处理:空闲,待处理和忙碌。当任何按钮为clicked()
时,您将转换到挂起状态并通过后端请求工作。当后端发出信号表明它已接受请求时,转换为忙碌,直到后端发出信号表示已完成处理请求,然后转换为空闲状态。