一、窗口与子部件
打开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窗口依然在最上面。