目录
1. 简单示例:空界面
2. 显示按钮
3. 对象树
1. 简单示例:空界面
main.cpp
#include// 包含一个应用程序类的头文件 #include "mywidget.h" int main(int argc, char *argv[]) { // 所有命令行参数都传到这个里面。a是应用程序对象,有且只能有1个 QApplication a(argc, argv); // 显示窗口。show()方法是以顶层的方式弹出控件 myWidget w; w.show(); // 进入消息循环,代码阻塞 return a.exec(); }
mywidget.h
#ifndef MYWIDGET_H #define MYWIDGET_H #include// 包含头文件 QWidget 窗口类 class myWidget : public QWidget { Q_OBJECT // Q_OBJECT宏,允许类中使用信号和槽的控制 public: myWidget(QWidget *parent = 0); // 有参构造函数,默认值是nullptr ~myWidget(); }; #endif #include "mywidget.h" myWidget::myWidget(QWidget *parent) : QWidget(parent) { } myWidget::~myWidget() { }
2. 显示按钮
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include // 包含头文件 QWidget 窗口类
class myWidget : public QWidget
{
Q_OBJECT // Q_OBJECT宏,允许类中使用信号和槽的控制
public:
myWidget(QWidget *parent = 0); // 有参构造函数,默认值是nullptr
~myWidget();
};
#endif
#include "mywidget.h"
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
{
// 创建一个按钮
QPushButton * btn = new QPushButton;
// btn->show(); // show()以顶层方式弹出窗口控件
// 让 btn 对象依赖在myWidget窗口中
btn->setParent(this);
// 显示文本
btn->setText("button1");
}
myWidget::~myWidget()
{
}
3. 对象树
当创建的对象在堆区时,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作。因为会将所有对象放入对象树中。用对象树一定程度上简化了Qt的内存回收机制。
实现方式:
当你创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作为参数,这个参数就是parent指针,也就是父对象指针。这相当于,在创建QObject对象时,可以提供一个父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表。
当父对象析构时,这个列表中的所有对象也会被析构。(注意,这个父对象并不是继承意义上的父类)。这种机制在GUI程序设计中相当有用。例如一个按钮有一个QShortcut快捷键对象作为其子对象。当我们删除按钮的时候,这个快捷键理应被删除,这是合理的。



