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

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

本文关键字:信号 是否 clicked 何知道 released QPushButton      更新时间:2023-10-16

在我的应用程序中,有一些QPushButton需要以不同的方式处理"无效发布"answers"单击"。

我所说的"无效释放"是指发生在按钮外的释放(在按钮内按下之后)。

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

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

更新::背景:

我有一组三个按钮,每个按钮都可以对后端启动相同的操作(使用不同的配置)。然而,后端不能处理多个连续的启动命令而不清理已经启动的命令,所以我必须在按钮组中防止这种情况。

这个应用程序是多点触控,这使得它很容易点击所有三个按钮在同一时间。

我想做什么:

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

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

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

4)如果用户触发了一个有效的释放(点击),按钮组也应该禁用用户已经点击过的按钮,直到后台允许后才能再次点击。

如果我不能区分有效和无效的释放,那么我将不得不以与情况3相同的方式对待情况4)和情况2)。这是不可取的。

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

您还可以使用三种状态来简化故障处理:空闲、挂起和繁忙。当任何按钮为clicked()时,您将转换到挂起状态并请求后端工作。当后端发出信号表示它已接受请求时,切换到繁忙状态,直到后端发出信号表示它已完成处理请求,而您则切换到空闲状态。