Parenting system介绍
这是我要介绍的QT程序的第一个重要的概念——Parenting system,原谅我不知道怎么翻译=_=。
这个机制的实现由QObject类提供,该类是QT中绝大部分组件的基类。QT中类的关系简图如下:
可以看到,我们在上一节中所使用的QPushButton组件也继承自QObject类,所以该组件也支持Parenting system机制。
代码演示
接下来我将通过一段代码来演示Parenting system机制的作用:
#include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication a(argc, argv); QPushButton *button1 = new QPushButton("Hello World"); // 实例化button2,在构造函数的第二个参数中填入button1的地址 // 此时button2就是button1的子组件 QPushButton *button2 = new QPushButton("Hi", button1); // 只需要显示父组件,其下的子组件就会一同显示 // 另外子组件也不需要单独调用delete(),他会随着父组件一起被释放 button1->show(); return a.exec(); }
运行后显示是这样的:
我们将窗体拉大,变成如下:
解读
可以看到,button2是显示在了button1的上面。这就很实际了,因为我们常见的Windows窗体都是在一个组件上叠加其他组件来显示的,例如:
每一个颜色的框框代表一个组件(没有把所有组件都标记出来,只摘取部分说明问题)。可以发现这样一个很复杂的窗体,就是一个面积很大的组件上面无限层次的叠加小组件来最终实现的。
而维护这种组件之间的父子关系的方法就是我们本篇文章所介绍的——Parenting system机制。
但是我们刚刚的程序还存在一个问题,就是父组件button1是一个按钮,试想一下如果把button1换成一个显示空白的组件是不是会更好一些?相关内容将在下一篇文章中详述。