gpt4 book ai didi

c++ - Q按钮 : How to know whether a "released" signal will be followed by a "clicked" signal?

转载 作者:行者123 更新时间:2023-11-28 05:27:08 24 4
gpt4 key购买 nike

在我的应用程序中,有一些QPushButton需要我以不同的方式处理“无效释放”和“点击”。

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

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

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

更新::背景:

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

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

我想做的事情:

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

2) 当后端通知按钮组所有先前启动的服务都已关闭并清理并且准备好进行下一次按钮单击时,按钮组将解锁所有按钮。

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

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

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

最佳答案

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

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

关于c++ - Q按钮 : How to know whether a "released" signal will be followed by a "clicked" signal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40307820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com