赞
踩
QWidget类是所有用户界面对象的基类,被称为基础窗口部件。QWidget继承自QObject类和QPaintDevice类。
QObject类是所有支持Qt对象模型(Qt Object Model)的Qt对象的的基类。
QPaintDevice类是所有可以绘制的对象的基类。
简单代码:
- #include "mainwindow.h"
- #include <QApplication>
- #include <QLabel>
- #include <QWidget>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- MainWindow w;
- // w.show();
- //新建一个窗口 没有父对象
- QWidget *widgetParent = new QWidget();
- widgetParent->setWindowTitle(QObject::tr("我是widget窗口"));
- // labelChild指定了父窗口为widget,所以不是窗口
- QLabel *labelChild = new QLabel(widgetParent);
- labelChild->setText(QObject::tr("labelChild:我不是独立窗口,\n只是widget的子部件"));
-
- // 新建QLabel对象,没有父对象
- QLabel *label2Parent = new QLabel();
- labelParent->setWindowTitle(QObject::tr("我是labelParent窗口"));
- //设置窗口的大小
- labelParent->resize(300,300);
- // 设置要显示的信息
- labelParent->setText(QObject::tr("labelParent:我是个窗口"));
-
-
- // 在屏幕上显示出来
- labelParent->show();
- widgetParent->resize(300,300);
- widgetParent->show();
-
-
- int ret = a.exec();
- delete widgetParent;//会自动删除labelChild;
- delete labelParent;
- return ret;
- }
运行结果:
窗口部件(Widget):简称部件,是搭建Qt界面的主要组成部分。窗口部件不但包含我们前面讲过的QMainWindow、QDialog、QWidget还包括我们常用的按钮、标签、表格、单选框等都是窗口部件。
窗口:我们把没有嵌入到其他部件中的部件称为窗口,窗口一般都有标题栏和边框。 窗口就是没有父部件的部件,所以称为顶层部件。
子部件:又称非窗口部件,在Qt中大部分部件被用作子部件,它们嵌入在别的窗口中,例如我们常说的按钮、标签、单选框等。
QWidget构造函数:QWidget::QWidget(QWidget * parent = 0, Qt::WindowFlags f = 0)
(1)前面的parent就是指父窗口部件,默认值为0,表明没有父窗口;
(2)f参数是Qt::WindowFlags枚举类型的,分为窗口类型(WindowType)和窗口标志(WindowFlags)。
(3)前者可以定义窗口的类型,比如我们这里f=0,表明使用了Qt::Widget一项,这是QWidget的默认类型,这种类型的部件如果有父窗口,那么它就是子部件,否则就是独立的窗口。
(4)后者包括了很多类型,
常用标志举例
Qt::FramelessWindowHint用来产生一个没有边框的窗口。
Qt::WindowStaysOnTopHint用来使该窗口停留在所有其它窗口上面。
Qt::Dialog用来生成对话窗口(就是带问号的窗口)
Qt::SplashScreen用来产生一个没有边框的窗口。
对于一个窗口,往往要设置它的大小和运行时出现的位置,这就是窗口几何布局。在前面的例子中已经看到了, widgetParent默认的大小就是它所包含的子部件 labe2Child的大小,即使widgetParent设置了大小,还是以labe2Child为准。
而widgetParent和labe2Child出现时在窗口上的位置也是不确定的。对于窗口的大小和位置,根据是否包含边框和标题栏两种情况,要用不同的函数来获取。可以在帮助索引中查看Window and Dialog Widgets关键字,文档中显示了窗口的几何布局图,
这里的函数分为两类,一类是包含框架的,一类是不包含框架的:
包含框架:x()、y()、frameGeometry()、pos()和move()等函数;
不包含框架:geometry()、width()、height()、rect()和size()等函数。
可以添加以下代码得到:
- qDebug()<<"widgetParent->x();"<<widgetParent->x();
- qDebug()<<"widgetParent->y();"<<widgetParent->y();
- qDebug()<<"widgetParent->pos();"<<widgetParent->pos();
- qDebug()<<"widgetParent->frameGeometry();"<<widgetParent->frameGeometry();
- qDebug()<<"widgetParent->geometry();"<<widgetParent->geometry();
- qDebug()<<"widgetParent->width();"<<widgetParent->width();
- qDebug()<<"widgetParent->height();"<<widgetParent->height();
- qDebug()<<"widgetParent->size();"<<widgetParent->size();
- qDebug()<<"widgetParent->rect();"<<widgetParent->rect();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。