QPushButton:如何知道"released"信号后面是否会跟"clicked"信号?
QPushButton: How to know whether a "released" signal will be followed by a "clicked" signal?
在我的应用程序中,有一些QPushButton
需要以不同的方式处理"无效发布"answers"单击"。
我所说的"无效释放"是指发生在按钮外的释放(在按钮内按下之后)。
所以我试图从QPushButton
继承并实现我自己的信号void released(bool validClick);
。
我正在考虑使用mouseReleaseEvent
来检查它是否在按钮的rect()
中推断clicked()
信号是否会跟随released()
信号。这是一个好方法吗?
更新::背景:
我有一组三个按钮,每个按钮都可以对后端启动相同的操作(使用不同的配置)。然而,后端不能处理多个连续的启动命令而不清理已经启动的命令,所以我必须在按钮组中防止这种情况。
这个应用程序是多点触控,这使得它很容易点击所有三个按钮在同一时间。
我想做什么:
1)按下其中一个按钮时,禁用其他按钮。这是必要的,因为这是一个多点触控GUI,同时点击多个按钮是我需要避免的第一件事。
2)当后端通知按钮组所有之前启动的服务已经关闭和清理,并准备点击下一个按钮时,按钮组解锁所有按钮。
3)如果用户触发无效释放(按下按钮,在其外释放),则所有按钮应立即解锁。
4)如果用户触发了一个有效的释放(点击),按钮组也应该禁用用户已经点击过的按钮,直到后台允许后才能再次点击。
如果我不能区分有效和无效的释放,那么我将不得不以与情况3相同的方式对待情况4)和情况2)。这是不可取的。
您不关心按下或释放,只关心点击和后端完成任务的指示。你有两种状态:空闲和忙碌。空闲时,按钮启用。当任何按钮为clicked()
时,您将转换到忙碌状态,直到后端信号表明它不再忙碌。使用状态机框架实现这一点很简单。
您还可以使用三种状态来简化故障处理:空闲、挂起和繁忙。当任何按钮为clicked()
时,您将转换到挂起状态并请求后端工作。当后端发出信号表示它已接受请求时,切换到繁忙状态,直到后端发出信号表示它已完成处理请求,而您则切换到空闲状态。
- GTK C++:找不到信号处理程序 您是否使用 -rdynamic 进行了编译?
- 从另一个线程发出信号是否安全?
- 在 C++17 中,是否未定义使用无锁原子学保护从信号处理程序传递的数据?
- 如果代码中没有连接任何插槽,是否有理由发出Qt信号?
- GTK+3 编译错误"找不到信号处理程序",您是否使用 -rdynamic 进行了编译?
- 当对话框中的任何小部件发出信号时,是否可以调用插槽
- 是否可以向特定的线程 ID 发送信号?
- C++:提升:托管共享内存是否需要信号量锁
- 如果没有线程阻塞信号,并且有一个线程处于"sigwait()"中,是否可以保证被阻塞的线程将接收下一
- 我是否过度设计了每个线程的信号阻塞
- 检查信号处理程序是否不是默认值
- 即使程序刚刚启动,是否可以始终捕获信号
- (C++)GTK 警告 **:找不到信号处理程序。您是否使用 -rdynamic 编译?
- 在传递的对象即将被销毁之前,发出将QObject指针作为参数传递的信号是否安全
- 这个Qt DBus信号连接代码是否正确
- worker是否可以在Qt中使用信号/插槽连接停止自己的线程?
- Qt - 当值发生变化时,QSpinBox 上每个失去焦点的信号是否有信号
- c++11 信号是否等同于增强信号
- 在SystemC中检查信号是否有效的最佳方法是什么?
- 在Linux/ c++中,发送给线程/进程的信号是否使其变为活动状态?