窗口部件


QMainWindow是带有菜单栏和工具栏的主窗口类,QDialog是各种对话框的基类,QWidget类是所有用户界面对象的基类,被称为基础窗口部件。QWidget继承自QObject类和QPaintDevice类,其中,QObject类是所有支持Qt对象模型的对象的基类,QPaintDevice类是所有可以绘制对象的基类。

新建Qt Widgets应用

新建HelloworldDialog类,基类QDialog。在Qt Creator的编辑模式下双击项目文件列表中界面文件分类下的helloworlddialog.ui,进入设计模式。从部件列表中找到Label部件,然后按住鼠标左键将它拖到主设计区的界面上,再双击它进入编辑状态后输入“Hello World!”字符串。

helloworld.pro该文件是项目文件,其中包含了项目相关信息。helloworlddialog.h该文件是新建的HelloworldDialog类的头文件。helloworlddialog.cpp该文件是新建的HelloworldDialog类的源文件。helloworlddialog.ui该文件是设计师设计的界面对应的界面文件。



Ui_HelloworldDialog类是由Qt用户界面编译器针对UI界面编译生成的。这个类包含了QLabel指针和void setupUi(QDialog *HelloworldDialog)以及void retranslateUi(QDialog *HelloworldDialog)函数。

在命名空间中,可以看到HelloworldDialog继承自这个Ui_HelloworldDialog类。

在helloworlddialog.h头文件中可以看到HelloworldDialog也继承自QDialog类,这是我们建立工程时设置的。类里有一个私有变量,其指向自己类型的对象。

其构造和析构函数的实现如下所示:

在构造函数中setupUi是其父类Ui_HelloworldDialog的方法,用于建立UI。

直接使用代码实现

直接添加main.cpp文件,这里的代码需要QApplication、QDialog和QLabel这3个类。QDialog在helloworlddialog.h头文件中已经包含了。通过QDialog实例化一个对话框界面。新建一个QLabel对象,并将QDialog对象作为参数,表明对话框是它的父窗口,也就是说这个标签放在对话框窗口中。在默认情况下,新建的可视部件对象都是不可见的,要使用show函数让它们显示出来。QApplication对象的exec进入事件循环,这样Qt应用程序运行时便可以接收产生的事件。

使用.ui文件

在模板中选择Qt中的Qt Designer Form,在选择界面模板时选择Dialog without Buttons项,单击下一步,将文件名称改为hellodialog.ui。ui文件其实是XML文件,里面是界面部件的相关信息。

由ui文件生成的ui_hellodialog.h头文件,下面是具体内容。是由Qt用户界面编译器5.9.9生成的代码,并且手动对该文件改动,再次编译ui文件时会丢失。

setupUi()函数用来生成界面,因为当时选择模板时使用的是对话框,所以现在这个函数的参数是QDialog类型的。第29行和30行设置了对话框的对象名称。第31行设置了窗口的带下。第32-34行在对话框上创建了标签对象,并设置了它的对象名称、大小和位置。第36行调用了retranslateUi()函数,这个函数在第41-45行进行了定义,实现了对窗口里的字符串进行编码转换的功能。第38行调用了QMetaObject类的connectSlotsByName()静态函数,使得窗口中的部件可以实现按对象名进行信号和槽的关联。

这里的HelloDialog是ui_hellodialog.h头文件中定义的继承自Ui_HelloworldDialog的类。

布局管理器

Qt主要提供QLayout类及其子类作为布局管理器,它们可以实现常用的布局管理功能。Qt的布局管理关系提供了强大的机制来自动排列窗口中的所有部件,确保它们有效地使用空间。
所有QWidget的子类的实例(对象)都可以使用布局管理器管理位于它们之中的子部件,QWidget::setLayout()函数可以在一个部件上应用布局管理器。一旦一个部件上设置了布局管理器,那么它会完成以下几种任务:定位子部件;感知窗口默认大小;感知窗口最小大小;窗口大小变化时进行处理;当内容改变时自动更新(字体大小、文本或子部件的其他内容随之改变,隐藏或显示子部件,溢出一个子部件)

QLayout类是布局管理器的基类,是一个抽象基类,继承自QObject和QLayoutItem类,QLayoutItem类提供了一个供QLayout操作的抽象项目。QLayout和QLayoutItem都是都是在设计自己的布局管理器时才使用的,一般只需要使用QLayout的几个子类即可。它们分别是QBoxLayout(基本布局管理器)、QGridLayout(栅格布局管理器)、QFormLayout(窗体布局管理器)和QStackedLayout(栈布局管理器)。

基本布局管理器

基本布局管理器QBoxLayout类可以使子部件在水平方向或者垂直方向排成一列,它将所有的空间分成一行盒子,然后将每个部件放入一个盒子中。它有两个子类QHBoxLayout水平布局管理器和QVBoxLayout垂直布局管理器。

栅格布局管理器

栅格布局管理器QGridLayout类使部件在网格中进行布局,它将所有的空间分隔成一些行和列,行和列的交叉处形成了单元格,然后将部件放入一个确定的单元格中。

窗体布局管理器

窗体布局管理器QFormLayout类用来管理表单的输入部件以及与它们相关的标签。窗体布局管理器将它的子部件分为两列,左边是一些标签,右边是一些输入部件,比如行编辑器或者数字选择框等。

QT Creator快速入门读书笔记:新建HelloWorld工程
QT Creator快速入门读书笔记:窗口部件初探

QT Creator快速入门读书笔记:新建HelloWorld工程相关推荐

  1. QT Creator快速入门读书笔记:窗口部件初探

    QWidget基础窗口部件 Qt把没有嵌入到其他部件中的部件称为窗口,一般窗口都有边框和标题栏,就像程序中的widget和label一样.QMainWindow和大量的QDialog子类是最一般的窗口 ...

  2. Qt Creator快速入门(第3版)

    ​​​第1章Qt Creator简介 可以参考Qt开源社区(www.qter.org)  打开文件所在的文件夹: Ctrl+ Tab快捷键,可以在多个打开的文档切换 帮助里面的: 书签:Ctrl十 M ...

  3. QT Creator 快速入门教程 读书笔记(一)

    一 Qt简介 Qt 是一个跨平台的C++应用程序框架,支持Windows.Linux.Mac OS X.Android.iOS.Windows Phone.嵌入式系统等.也就是说,Qt 可以同时支持桌 ...

  4. 《Qt Creator快速入门(第3版)》

    第1章Qt Creator简介 可以参考Qt开源社区(www.qter.org)  打开文件所在的文件夹: Ctrl+ Tab快捷键,可以在多个打开的文档切换 帮助里面的: 书签:Ctrl十 M 第2 ...

  5. QT Creator 快速入门教程 读书笔记

    http://www.cnblogs.com/majianchao/p/6602234.html

  6. php编程读书笔记,php3小时快速入门-读书笔记

    1.php介绍:web开发 2.hello world 编写 echo "hello world"; ?> echo ' ' 3.开发环境 wamp---localhost/ ...

  7. Qt 快速入门学习笔记

    Qt 快速入门学习笔记 环境安装 环境配置以及安装 安装包下载地址 1.windows安装 msvc编译器模块需要安装Windows软件开发工具包. MinGW是Windows平台使用GNU工具导入库 ...

  8. Docker快速入门总结笔记

    文章目录 1. Docker概述 2. 虚拟化技术和容器化技术 3. Docker的基本组成 4. Docker的安装 5. Docker的卸载 6. 配置阿里云镜像加速 8. Docker容器运行流 ...

  9. Qt Designer快速入门

    Qt Designer快速入门 Qt Designer快速入门 Qt Designer快速入门 使用Qt Designer涉及四个基本步骤: 选择你的形式和对象 将对象放在表格上 将信号连接到插槽 预 ...

最新文章

  1. Intellij IDEA 添加jar包
  2. RESTful服务最佳实践
  3. compass reset和layout [Sass和compass学习笔记]
  4. php加入js动态效果,js怎么给输入框增加动画效果
  5. mongoDB的监控工具
  6. SQLite—homework
  7. 【GPU编程】基于GPU的光线投射体绘制(GPU-Based Ray-Casting Volume Rendering)入门学习
  8. MongoDB聚合运算之mapReduce函数的使用(11)
  9. 模型训练中batch_size的选择
  10. IT,大一,这里我有点建议
  11. 用tbtools基因家族分析《一》
  12. Windbg远程调试
  13. 如何修改电驴服务器地址,emule设置连接服务器地址
  14. iPhone内存比Android手机小,为什么iPhone内存1G、2G比安卓内存4G运行更快?
  15. python第一天----爬取优美图库的图片
  16. 成都宏鑫软科技有限公司
  17. 连续10年霸榜第一?程序员「最常用」的编程语言是它?
  18. OCR识别文字是什么?了解一下如何使用
  19. 仿soul交友盲盒1.0全开源源码
  20. 基于Linux的kfifo移植到STM32(支持os的互斥访问)

热门文章

  1. 米家扫地机器人是石头代工的_扫地机器人哪个牌子好?推荐备受消费者喜爱的五大品牌...
  2. Nullable Value Type
  3. 游戏核心之固定流水线
  4. 互评Beta版本-SkyHunter
  5. 网页三剑客Dreamweaver、Flash、Fireworks CS6
  6. 某电脑开机后电源指示灯亮,能听到 CPU 风扇的声音,但无显示无报警声音,故障部件不可能...
  7. 第9关:生成器与 yield
  8. Hive Lateral View
  9. 在HTML中rotate属性,CSS 图片的旋转rotate旋转属性(一)
  10. Python入门(13)——文件和异常