4

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

  1. 聚合作为指针成员
  2. 聚合
  3. 多重,私有继承

在此处输入图像描述

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

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

4

2 回答 2

3

我不认为第二个选项不支持自定义插槽是真的。

该选择在官方 Qt 文档中进行了讨论。见http://doc.qt.io/qt-4.8/designer-using-a-ui-file.html#compile-time-form-processing

但是,请注意,本文档中介绍的三种方法与 Qt Creator 中介绍的三个选项不对应。文档中介绍的第一种方法,直接方法,不是这里的三个选择之一——这种方法不能通过此设置控制的 Qt Creator 功能获得。第二个选项(聚合,或“单一继承方法”)有两种可用,细微的变化是 ui 类成员是作为数据成员(第二个选项)还是作为指针成员(第一个选项)。

我的偏好是第三种选择,多重继承。这也是使用Qt 4 进行 C++ GUI 编程(第一版可在线免费获得)中使用的方法,它称这种方法是最干净的。当我在编写我的课程时,我并没有真正考虑两个对象,一个带有 UI,另一个带有功能,我只考虑一个,多重继承与它最匹配。但是文档给出了为什么“聚合作为指针成员”是默认的原因。

于 2011-04-13T12:13:39.407 回答
1

QT5 更新:

如今,您可以以更多方式支持自定义插槽,例如使用 lambda 和对插槽的普通函数支持(查看此处)

另外,请注意推荐的选项是Pointer Member,也称为 Pimpl idiom。优点是 UI 对象的前向声明将为更大的项目提供更快的编译时间,并且共享库将很容易打包(如此处所述)

于 2018-11-30T15:11:42.710 回答