欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt窗口、子部件和窗口类型

程序员文章站 2022-05-30 17:31:08
...

一、窗口与子部件

打开Qt Creator,新建空的qmake项目,项目名为mywidget,完成后在mywidget.pro中添加“QT += widgets”.

然后往项目中添加C++源文件(C++ Source File)main.cpp,并添加以下代码:

#include<QtWidgets>                                 //下面用到的QApplication、QWidget等类都包含在QtWidgets模块中


int main(int argc,char *argv[])
{
    QApplication a(argc,argv);
    QWidget *widget = new QWidget();           //新建QWidget类对象,默认parent参数是0,所以他是个窗口;堆上分配内存
    widget->setWindowTitle(QObject::tr("我是widget")); //设置窗口标题
    QLabel *label = new QLabel();              //新建QLabel对象,默认praent参数是0,所以他是个窗口;堆上分配内存
    label->setWindowTitle(QObject::tr("我是label"));   //设置窗口标题
    label->setText(QObject::tr("label:我是个窗口"));    //设置要显示的信息
    label->resize(180,20);                            //改变部件大小,以便能显示出完整的内容
    QLabel *label2 = new QLabel(widget);                   //label2指定了父窗口为widget,所以不是窗口;堆上分配内存
    label2->setText(QObject::tr("label2:我不是独立窗口,只是widget的子部件"));   //设置要显示的信息
    label2->resize(250,20);                           //改变部件大小,以便能显示出完整的内容
    label->show();                                    //在屏幕上显示
    widget->show();
    int ret = a.exec();                               //堆上,必须这样做
    delete widget;                                    //销毁释放widget父窗口时,就会自动释放子对象label2
    delete label;
    return ret;                                       //堆上必须这样返回
}
                                                      Qt窗口、子部件和窗口类型

二、窗口类型

前面讲到的窗口一般都有边框和标题栏,其实这个不是必须的。QWidget的构造函数有两个参数:QWidget *parent = 0和QT::WindowFlags f = 0,前面的parent是父窗口部件,默认值是0,表明没有父窗口;而后的f参数是QT::WindowFlags 类型的,是Qt::WindowType枚举类型值的或组合。

Qt::WindowType包含了很多类型,Qt::Dialog、Qt::SplashScreen等均为其类型。

更改1:

QWidget *widget = new QWidget(0,Qt::Dialog);

QLabel *label = new QLabel(0,Qt::SplashScreen);
分析:一个是对话框类型,一个是欢迎窗口类型
                                                Qt窗口、子部件和窗口类型

更改2:

QWidget *widget = new QWidget(0,Qt::Dialog | Qt::FramelessWindowHint);

QLabel *label = new QLabel(0,Qt::SplashScreen | Qt::WindowStaysOnTopHint);
分析:Qt::FramelessWindowHint用来产生一个没有边框的窗口,而Qt::WindowStaysOnTopHint用来使该窗口停留在所有其他窗口上面。单击Qt Creator,只有widget窗口隐藏到了后面,label窗口依然在最上面。

                  Qt窗口、子部件和窗口类型