QPushButton:如何知道 "released" 信号后面是否会有 "clicked" 信号?

QPushButton: How to know whether a "released" signal will be followed by a "clicked" signal?

在我的应用程序中,有几个 QPushButton 我需要以不同方式处理 "invalid release" 和 "click"。

"invalid release" 我的意思是在按钮外发生释放(在按钮内按下后)。

所以我试图从 QPushButton 继承并实现我自己的信号 void released(bool validClick);

我正在考虑使用 mouseReleaseEvent 检查它是否在按钮的 rect() 中以推断 clicked() 信号是否会跟随 released() 信号。这是个好方法吗?

更新::背景:

我有一组三个按钮,每个按钮都可以向后端启动相同的操作(具有不同的配置)。但是,如果没有清理已经启动的命令,后端无法处理多个连续的启动命令,所以我必须在按钮组中防止这种情况。

此应用程序是多点触控的,这使得同时单击所有三个按钮变得非常容易。

我想做的事情:

1) 当按下其中一个按钮时,禁用其他按钮。这是必不可少的,因为这是一个多点触控 GUI,同时单击多个按钮是我需要避免的第一件事。

2) 当后台通知按钮组之前启动的所有服务已经关闭并清理完毕,准备好下一次按钮点击时,按钮组解锁所有按钮。

3)如果用户触发无效释放(按下按钮,在按钮外释放),所有按钮应立即解锁。

4) 如果用户触发有效释放(点击),按钮组也应该禁用用户点击过的按钮,这样在后台允许之前不能再次点击。

如果我无法区分有效和无效发布,那么我将不得不像处理案例 3) 一样处理案例 4) 和案例 2)。这是不可取的。

您不关心印刷或发布,只关心点击和表明任务由后端完成的指示。您有两种状态:空闲和忙碌。空闲时,启用按钮。当任何按钮为 clicked() 时,您将转换为忙碌状态,直到后端发出不再忙碌的信号。使用状态机框架实现起来很简单。

您还可以拥有三种状态,以便更轻松地处理故障:空闲、挂起和忙碌。当任何按钮为 clicked() 时,您将转换为挂起状态并请求后端工作。当后端发出它已接受请求的信号时,转为忙碌,直到后端发出它已完成请求处理的信号,而你则转为空闲。