Qt窗口部件及子部件

QWidget类是所有用户界面对象的基类,被称为基础窗口部件。

#include <QApplication>
#include<QLabel>
#include<QWidget>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

        // 新建QWidget类对象,默认parent参数是0,所以它是个窗口
        QWidget *widget = new QWidget();

        // 设置窗口标题
        widget->setWindowTitle(QObject::tr("我是widget"));

        // 新建QLabel对象,默认parent参数是0,所以它是个窗口
        QLabel *label = new QLabel();

        label->setWindowTitle(QObject::tr("我是label"));

        // 设置要显示的信息
        label->setText(QObject::tr("label:我是个窗口"));

        // 改变部件大小,以便能显示出完整的内容
        label->resize(180, 20);

        // label2指定了父窗口为widget,所以不是窗口
        QLabel *label2 = new QLabel(widget);

        label2->setText(QObject::tr("label2:我不是独立窗口,只是widget的子部件"));

        label2->resize(250, 20);

        // 在屏幕上显示出来
        label->show();
        widget->show();

    return a.exec();
}

 1. Qt中把没有嵌入到其他部件中的部件称为窗口,一般窗口都有边框和标题栏,就像程序中的widget和label一样。窗口就是没有父部件的部件,所有又称为顶级部件.与其相对的是非窗口部件,又称为子部件.

    2.针对于以上这种简单的说法有弊端,如:QDialog为窗口是毋庸置疑的吧,但是在使用对话框时为其指定父窗口也是在正常不过了;

  3.本人所看书上最后还有两句代码delete label; delete widget;,但是添上这两句后运行结果会在后台显示,不会出现在桌面上;   

  4.程序中程序中label没有父窗口,而label2在widget中,widget是其父窗口。程序中使用new为label2分配了空间,但是并没有使用delete进行释放,这是因为在Qt中销毁父对象的时候会自动销毁子对象。

原文地址:https://www.cnblogs.com/scf141592/p/4983669.html