【发布时间】:2017-06-23 04:04:45
【问题描述】:
我想知道在 Qt 中向同一个对象发送信号是否被认为是不好的做法和反模式,或者这是否很好。
我正面临这样的情况:
QObject::connect (this, &MyFoo::ready,
this, &MyFoo::execute,
Qt::ConnectionType::QueuedConnection);
然后从内部execute 我想emit ready。这样做的动机是避免深度递归。我的替代方法是从execute 递归调用execute。
【问题讨论】:
-
在我看来,这不是一种反模式,但我看不到任何在设计级别上无法简化的用例。为什么要将呼叫排队执行?一个简单的循环不符合您的需要?如果没有,您可以使用
[static] bool QMetaObject::invokeMethod在没有信号的情况下执行与示例完全相同的操作 -
只需考虑将信号 (
MyFoo::ready) 和插槽 (MyFoo::ready) 放在不同的类中的选项。如果它们可以属于不同的类,您可能会得到更好的设计。如果您的目标只是将插槽调用排队,您可能需要查看此answer。
标签: qt