【发布时间】:2021-06-16 02:18:17
【问题描述】:
我非常了解使用new syntax for connecting slots in Qt 5 的好处和坏处。仅提及一些:
优点:
- 编译时间检查(槽存在,兼容的参数...)
- 可以使用 lambda(适用于非常短且特定的时隙)
- 保护私有/受保护的插槽不被类外调用 (ref)
对比:
- 在某些情况下语法更复杂(特别是重载)
- 不支持带默认值参数的槽
我也知道在某些(极少数)情况下(目前)还不能使用新语法 (QFileDialog::open)。
现在,对于旧语法,我们必须在定义中将这些方法标记为 slots,用 Q_OBJECT 宏标记类,moc 它,并从 @ 继承987654327@。如上所述,新语法不需要我标记为 slots 的方法。
在使用(并且仅使用)新语法时保留slots 说明符有什么好处?如果插槽是一个类使用的唯一QMetaObject 的特征,那么我们可以避免将类标记为Q_OBJECT,甚至从QObject 本身继承。
【问题讨论】:
-
如果您使用 QML,定义为
slot的函数也可以从 QML 调用。但这也可以通过使用Q_INVOKABLE来实现。 -
@JarMan 好点,我还没有大量使用 QML,所以对我来说这是一个未开发的世界。谢谢!
标签: c++ qt qt5 signals-slots