为什么设计器生成的UI类嵌入为“Aggregation”无法实现自定义插槽?

时间:2011-04-08 05:03:51

标签: c++ oop qt qt-creator qt-designer

我看到设计器生成的UI类是使用Qt中的以下任何方法嵌入的,

  1. 聚合作为指针成员
  2. 聚合
  3. 多重,私人继承
  4. enter image description here

    但据说第二种方法不支持自定义插槽。有人可以详细说明吗?为什么我们不能在使用聚合时实现自定义插槽?

    另外,详细说明每种方法的优缺点。

2 个答案:

答案 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)