QT学习笔记二 窗口和子部件

先说一下继承关系:

新建一个QT Widgets应用程序时,可供选择的基类有三个:QMainWindow,QWidget和QDialog

QMainWindow是带有菜单栏和工具栏的窗口类

QDialog是各种对话框的基类

QMainwindow和QDialog都继承自QWidget,不仅是这两个类,其他所有窗口部件都最终继承自QWidget

QWidget是所有用户界面对象的基类,被称作基础窗口部件。

QWidget继承自QObject和QPaintDevice

QObject是所有支持QT对象模型的基类

QPaintDevice是所有可以绘制的对象的基类

写一个窗口和子部件的例子:

1 创建一个空项目:New Project->其他项目->Empty qmake Project

2 在.pro文件中加上下面信息

3 添加一个C++源文件:添加新文件->C++->C++ Source File, 文件名:main.cpp,内容如下:

 1 #include <QtWidgets>
 2 
 3 int main(int argc, char *argv[]){
 4     QApplication a(argc,argv);
 5 
 6     QWidget *w = new QWidget();  // 新建QWidget对象,默认的parent参数是0,表明它是窗口,没有父窗口
 7     w->setWindowTitle(QObject::tr("我是一个窗口,没有父窗口"));  // 设置窗口标题
 8     w->resize(400,300);
 9     // QObject::tr函数可以实现多语言支持,建议程序中所有要显示到界面的文字都使用tr函数扩起来
10 
11     QLabel *l1 = new QLabel();  // 新建QLabel对象,默认的parent参数是0,表明它是窗口,没有父窗口
12     l1->setWindowTitle(QObject::tr("我是一个Label,同时也是一个窗口,因为我没有父窗口"));
13     l1->setText(QObject::tr("别看我是一个QLabel对象,但我继承自QWidget,所以我也是窗口,别瞧不起我!")); // 设置label内容
14     l1->resize(600,150); // 设置label大小
15 
16     QLabel *l2 = new QLabel(w); // 新建QLabel对象,参数是上面的QWidget对象,所以它不是窗口,子部件,因为有父窗口,
17     l2->setWindowTitle(QObject::tr("设置label的窗口标题")); // 因为它不是窗口,所以这句话没有作用
18     l2->setText(QObject::tr("我是一个Label,我有父窗口,所以我是子部件哦!"));
19     l2->resize(350,150);
20 
21     w->show();  // 显示QWidget窗口
22     l1->show(); // 显示QLabel窗口
23 
24     int ret = a.exec();
25 
26     delete l1; // 销毁QLabel对象
27     delete w;  // 销毁QWidget对象
28     // 因为l2的父窗口w被销毁,其子部件会自动销毁,所以l2不用单独销毁
29 
30     return ret;
31 }

显示效果如下:

posted @ 2018-05-23 21:50  云里飞  阅读(525)  评论(0编辑  收藏  举报