当前位置: 首页 > news >正文

【qt5_study】1.Hello world

模板

作为初学者我们选择第一个Application(Qt)和 Qt Widgets Application,所谓的模板就是 Qt为了方便开发程序,在新建工程时可以让用户基于一种模板来编写程序,包括 cpp文件, ui文件都已经快速的创建,而不用用户手动创建这些文件。

基类

这里默认选择的基类为 QMainWindow。在 Base class一项中我们还可以看到还有 QWidget和 QWialog这样的基类可以选择。在 C++篇我们已经学习什么叫基类,简单的来说,我们创建
的这个项目是基于 QMainWindow类去开发的。默认勾选“ Generate form”,意思是生成 ui窗体
文件 mainwindow.ui。为了学习方便,我们统一默认基 类为 QMainWindow,但是注意,在嵌入
式里一般不需要标题栏,状态栏等,所以常用的是 QWidget基类。

 QMainWindow:主窗口类,主窗口具有主菜单栏、工具栏和状态栏。 类似于一般的应用程
序的主窗口 。如果 你 想做个嵌套的窗口程序开发的软件,不妨选择这个 QMainWindow。
 QWidget:是可视界面类的基类,也就是说 QMainWindow类也是由 QWidget继承封装而来。
所以 QWidget要比 QMainWindow功能少一些。
 QDialog:对话框类,建立一个对话框界面。比较少使用此项作为基 类。一般以 QMainWindow和 QWidget作为基类的居多。 注因为 QWidget不带窗口标题栏等 嵌入式里最好 QWidget。

编译器

勾选编译器,这个Desktop Qt5.15.2 GCC 64bit编译器是我们在安装组件时选择的,使用这
个编译器可以编译出 Ubuntu版本上跑的可执行程序。这么一说是不是觉得还能编译出其他平台
的可执行程序?没错,假若我们现在有 ARM平台的 Qt编译器,那么选择 ARM平台的 Qt编译器即可编译出 Qt在 ARM平台上的可执行文件(这里说的可执行文件类似 window的 exe程序文件一样,直接能够运行)。

接着选无版本控制(会用git可以选),一直下一步到完成。

项目文件介绍

其中,左侧有上下两个子窗口,上面的窗口显示了项目的文件结构,显示当前的项目为
01_hello_world”,细心的还会发现 01_hello_world”是用粗体黑色标明。说明此项目是活动
项目,活动项目的项目根节点都是用粗体字体表示的。如果打开了多个项目,那么我们只需要
观察哪个是加粗的项目名就表示当前活动项目。

 01_hello_world.pro是项目管理文件,这个项目管理文件十分重要,当 你 加入了文 件或者删
除了文件, Qt Creator会自动修改这个 *.pro文件。有时候需要打开这个 *.pro文件添加我们
的设置项。
 Header分组,这个节点下存放的是项目内所有的头文件 *.h。
 Source分组,这个节点下存放的是项目内的所有 C++源码文件 *.cpp。
 Forms分组,这个节点下是存放项目内所有界面文件 *.ui。 *.ui文件由 XML语言描述组成,
编译时会生成相应的 cpp文件,这样交叉编译器就可以编译它了。

项目文件 *.pro

第 1行,添加了 Qt的支持的模块, core与 gui库是 Qt的默认设置。
第 3行,比较 Qt5版本,如果是 Qt5版本,在 main.cpp中 application是在 QtWidgets中的,
因此要包含这个库 。
第 5行, Qt5.15或者 Qt Creator10.0.0使用的是 C++17,较低版本使用是 C++11。
第 11行, SOURCES下的是 源文件 。
第 15行, HEADERS下是头文件。
第 18行, FORMS下是 ui界面文件。
第 21行,部署默认的规则。
第 22行, qnx:判断是不是 qnx操作系统 ,赋值 target.path = /temp/$${TARGET}/bin。               第23行,如果是 unix系统但不是安卓,赋值 target.path = /opt/$${TARGET}/bin。
第24行,如果 target.path为空目录,赋值 INSTALLS += target。
如果需要修改生成目标的可执行程序名字,可赋值 TARGET = xxx。否则 TARGET将默认
取值为项目的名字。

样式文件 *.ui

mainwindow.ui是一个 xml类型的文件 ,它的 xml内容如下。 这个文件是生成的不能手动
编辑。 只能够通过图形界面修改其属性。

双击mainwindow.ui后可以跳转到设计界面 如下图。 下面主要 介绍 主体部分。

1. ① 是控件栏,有各种各样的控件,上方的 Filter是过滤器,输入首写字母就可以快速定到
我们想要 找的控件。
2. ② 显示的是我们的窗口程序了,上面已经带有 MainWindow对象及其几个子对象 默认
MainWindow就带有菜单栏和状态栏。
3. ③ 是对象栏, ② 处用到的对象都在 ③ 处显示。
4. ④ 是属性栏, 点击 ③ 处对象栏的某个对象,就可以在 ④ 属性栏里编辑它的属性了。 属性项
有很多,包括位置,大小,文字,颜色,字体等等。

头文件 *.h

点击左边栏的编辑,回到项目的编辑工作窗口。点击项目下的Headers下的 mainwindow.h,mainwindow.h一般有与之对应的一个 cpp文件叫 mianwindow.cpp。 其中 mainwindow.h包含类的声明, mianwindow.cpp包含类的实现。第12行, MainWindow的声明中第一行是 Q_OBJECT,这是一个宏,由 Qt进行处理,这也是 Qt针对 C++扩展的地方,所有用到信号的类都要加这个宏。

源文件 *.cpp

MainWindow.cpp

第2行, MainWindow的实现类中,第 2行 include了一个文件 ui_mainwindow.h 这个文件
是 Qt根据 .ui文件自动生成的 ,也就是说 ui_mainwindow.h要点击编构建后才生成,我们才能看
到这个文件 。 构建 /编译后可以在 debug/release的目录找到这个文件。
第 6行,在 MainWindow构造函数中用“ “,”隔开 new一个 Ui中的 MainWindow。 这里
是一种初始化成员的方法。

第 8行, ui-->setupUi(this);这句话是进行界面初始化,将 this(指的是 MainWindow类的本
身),作为参数传到 setupUi里, ui界面文件的对象会以 this为父对象,所有子对象都将显示在
MainWindow里 。 我们要想使用 ui里的对象,必须将代码写在 ui-->setupUi(this)这句话之后,因
为 ui-->setupUi(this)会先初始化里面的对象,只有初始化里面的对象我们才能使用这个对象。
第13行, 析构函数里 delete掉 ui。 在 Qt里我们需要在析构函数里 delete的对象一般是 new创建的并且没有父对象的对象 。

mian.cpp

第 3行, 包含 QApplication类的定义。在每一个使用 Qt的应用程序中都必须使用一个
QApplication对象。 QApplication管理了各种各样的应用程序的广泛资源,比如默认的字体和光
标 。

第 5行 main()函数是程序的入口。几乎在使用 Qt的所有情况下, main()只需要在把控制
转交给 Qt库之前执行一些初始化,然后 Qt库通过事件来向程序告知用户的行为。 argc是命令
行变量的数量, argv是命令行变量的数组。
第 7行, a是这个程序的 QApplication。它在这里被创建并且处理这些命令行变量 。
第 8行,创建一个对象 w,这个对象就是 MainWindow。
第 9行,调用方法 show()。这样程序界面才能显示。
第 10行, 这里就是 main()把控制转交给 Qt,并且当应用程序退出的时候 exec()就会返回。
在exec()中, Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。

修改 ui文件显示 hello world

双击
mainwindow.ui 进入 Ui设计器”页面如下。

要显示“ Hello World!””,那么我们需要用常用的文本显示控件,常用的就是
Label文本控件了,当然 PushButon按钮类也是可以显示文本的。但是我们不需要按钮的功能,
只需要显示文本。 所以用 Label文本控件就可以了。

项目编译 &调试 &运行

http://www.lryc.cn/news/610849.html

相关文章:

  • Groovy学习篇章一之—— GDK 探秘:Groovy如何给Java对象“开外挂”,让String也能“跑命令”!
  • Git与TortoiseGit在Gitee平台的应用
  • 从零开始学网页开发:HTML、CSS和JavaScript的基础知识
  • SpringCloud学习-------Eureka详解
  • SpringBoot3.x入门到精通系列:4.3 性能优化技巧
  • HTTP性能优化实战:解决高并发场景下的连接瓶颈与延迟问题
  • 浏览器渲染 首屏优化 性能优化
  • ArrayList 深度剖析:从底层原理到性能优化的实战指南
  • MySQL索引底层原理与性能优化实践
  • 力扣:2246. 相邻字符不同的最长路径
  • 解析图像几何变换:从欧式到仿射再到透视
  • 从达梦到 StarRocks:国产数据库实时入仓实践
  • Python高级编程与实践:Python装饰器深入解析与应用
  • 使用 BAML 模糊解析改进 LangChain 知识图谱提取:成功率从25%提升到99%
  • 力扣刷题日常(15-16)
  • 【Electron】electron-vite中基于electron-builder与electron-updater实现程序远程自动更新,附源码
  • 国产大模型平替方案:Spring Boot通义千问API集成指南
  • 2025 年半导体用铜前驱体市场规模有多大?全景调研及投资前景分析
  • 接口测试用例书写规范
  • 基于 FFmpeg 与 V4L2 的多路摄像头视频采集,图像处理处理与 RTMP 推流项目(开源)
  • 【教育教学】人才培养方案制定
  • Linux内核C语言代码规范
  • MySQL内外连接详解
  • Python 基础语法(二):流程控制语句详解
  • 【Qt开发】常用控件(一)
  • 嵌入式硬件中运放的基本控制原理
  • 选佳沐信,智享便捷,乐在其中
  • LeetCode——2683. 相邻值的按位异或
  • 下架的软件又复活了,低调使用!
  • HFSS许可审计与分析