参考文献:《Qt Creator 快速入门》第三版 霍亚飞编著
在帮助索引中搜索QWidget 并查看,The QWidget class is the base class of all user interface objects.QWidget是所有用户界面的基类,被称为基础窗口部件,它是建立用户界面的主要元素。像主窗口、对话框、标签、按钮、文本输入框等都是窗口部件。
一、窗口与子部件。
窗口就是没有嵌入到其他部件中的部件,又称为顶级部件。与其相对嵌入到别的部件中的部件叫子部件。如下代码,label是窗口,label2是子部件。
int main(int argc,char* argv[])
{
QApplication a(argc,argv);
//新建qtWidgets类对象,默认参数是0,所以是个窗口
QWidget* widget=new QWidget();
//设置窗口标题
widget->setWindowTitle(QObject::tr("我是widget"));
//新建QLabel对象,默认parent参数0,所以它是个窗口
QLabel* label=new QLabel();
label->setWindowTitle(QObject::tr("我是label"));
label->resize(180,20);
//label 2指定了父窗口为widget,所有不是窗口
QLabel* label2=new QLabel(widget);
label2->setText(QObject::tr("label2:I am not window,i am zibujian"));
label2->resize(250,20);
//在屏幕上显示出来
label->show();
widget->show();
int ret=a.exec();
delete label;
delete widget;
return ret;
}运行结果

二、窗口类型和窗口状态
2、1窗口类型
QWidget的构造函数如下,
explicit QWidget(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());参数parent是父窗口,参数Qt::WindowFlags f是窗口类型,窗口类型是
Qt::WindowType枚举类型或类型的组合如
QWidget* widget=new QWidget(0,Qt::Dialog);//对话框类型
Qt::WindowFlags f可以是多个窗口枚举类型进行位或操作,如
QWidget* widget=new QWidget(0,Qt::Dialog|Qt::FramelessWindowHint);//没有边框的窗口
三、窗口集合布局
窗口几何布局就是指窗口大小和位置。从帮助文档中,可以看到窗口的几何布局按照是否边框和标题栏分为两组不同函数。如下图所示
- 包含边框: x(), y(), frameGeometry(), pos(), and move().
- 不如下包含边框 geometry(), width(), height(), rect(), and size().

如下代码
QWidget* widget=new QWidget(0,Qt::Dialog);
widget->show();
int x=widget->x();
int y=widget->y();
QRect geometry=widget->geometry();//不包含框架
QRect frame=widget->frameGeometry();//包含框架
qDebug()<<"x="<<x<<",y="<<y<<",geometry="<<geometry<<",frame="<<frame;打印结果
,打印结果x= 511 ,y= 222 ,geometry= QRect(520,260 640x480) ,frame= QRect(511,222 658x527)
widget到此为止,接下来几篇要学习几种常用的窗口部件。
版权声明:本文为sinat_41928334原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。