将信号和插槽连锁几次可以吗
Is it OK to chain signals and slots several times?
我有类似于以下类的设计,我想知道我是否可以使用许多信号槽连接在它们之间进行通信。有一个MainWindow
类保存所有GUI,然后是Wrapper
类,它为后端提供接口,然后是用于生成和管理线程的Controller
类,最后是负责所有工作的Worker
。
现在假设我正在加载一个文件,并希望使用MainWindow
中的进度条显示进度。我的Worker
类将updateProgress(int progress)
发送到Controller::handleProgress(int progress)
插槽,后者再次向Wrapper
类发送进度信号,后者反过来向主窗口发送进度信号。主窗口最终更新进度条。
类似地,当数据被加载时,它在Wrapper
类中被处理,并且再次通过信号和时隙进行通信(尽管少了一步(。
这是在Qt中做事的标准方式吗?还是我应该重新思考我的设计?
这是一种有效的可能性。
请注意,Qt允许您更进一步,并执行以下操作:
QObject::connect(&sender, SIGNAL(mySenderSignal(int)),
&receiver, SIGNAL(myReceiverSignal(int));
没错,你可以把一个信号绑定到一个信号上。它所做的一切都可以被视为"当发送器的信号发出时,发出接收器的信号"。
如果你在中间插槽中没有任何特定的任务要执行,这可能会为你节省几行,同时准确地显示你在做什么:你正在"转发"一个信号。否则,如果你必须在两者之间做工作,那么你必须保留信号和插槽。
请注意,您仍然需要确保信号签名匹配。
相关文章:
- 通过字符串来计算长度需要更长的时间,而不是移动字符串几次?
- 为什么我的信号处理程序只执行一次?
- 如何遍历几个每小时一次的根(.root)文件,并将它们组合成更大的每日数据.root文件?
- Vscode 自动格式化代码在运行几次后停止工作
- 运行几次后合并段错误C++(指针算术)
- 在循环输出中重用矢量 "Killed" 在几次迭代后
- 为什么如果我启动几次程序,我的 md5 总是不同的
- 为什么PTHREAD_KEY_CREATE DESTRUCTOR几次调用
- Boost.Asio:用不同的"股"包裹几次
- QTcpSocket 在几次连接成功后发出"Connection Refused Error"?
- 循环崩溃/损坏几次(完美)迭代后
- 速推basic_deadline_timer在几次迭代后停止触发
- remove_if问题(几次删除后停止删除)
- 几次调用后,外部程序的执行失败
- QT创建者:c++应用程序运行几次后中断
- 一个指针可以用c++删除几次吗
- 服务器套接字只能连接几次(Winsock c++)
- 将信号和插槽连锁几次可以吗
- C++比较冲浪描述符算法匹配中断几次
- 多线程性能在执行几次操作后下降