我看到设计器生成的UI类是使用Qt中的以下任何方法嵌入的,
但据说第二种方法不支持自定义插槽。有人可以详细说明吗?为什么我们不能在使用聚合时实现自定义插槽?
另外,详细说明每种方法的优缺点。
答案 0 :(得分:2)
我不认为第二个选项不支持自定义插槽。
选择在官方Qt文档中讨论。见http://doc.qt.io/qt-4.8/designer-using-a-ui-file.html#compile-time-form-processing
但请注意,本文档中介绍的三种方法与Qt Creator中提供的三种方法不对应。文档“直接方法”中提出的第一种方法不是这里的三种选择之一 - 这种方法不能通过此设置控制的Qt Creator功能获得。第二个选项(聚合或“单继承方法”)有两种类型,轻微的变化是ui类成员是作为数据成员(第二个选项)还是作为指针成员(第一个选项)。
我的偏好是第三个选项,多重继承。这也是C++ GUI Programming with Qt 4(第一版available for free online)中使用的方式,它将此方法称为最干净的方法。当我在编写课程时,我并没有真正考虑两个对象,一个是UI,另一个是功能,我只考虑一个,多个继承匹配最好。但该文档给出了“聚合作为指针成员”的默认原因。
答案 1 :(得分:1)
QT5更新:
如今,您可以以更多方式支持自定义插槽,例如使用lambda和对插槽(check here)的常规功能支持。
此外,请注意,推荐的选项是the Pointer Member,也称为Pimpl习惯用语。优点是UI对象的前向声明将使大型项目的编译时间更快,并且共享库也将易于打包(as stated here)。