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

一、窗口与子部件

打开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;                                       //堆上必须这样返回
}
                                                      

二、窗口类型

前面讲到的窗口一般都有边框和标题栏,其实这个不是必须的。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);
分析:一个是对话框类型,一个是欢迎窗口类型
                                                

更改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窗口依然在最上面。

                  

猜你喜欢

转载自blog.csdn.net/gaoyu1253401563/article/details/79207414