P2 Qt Creator创建第一个Qt程序

 前言

                               

🎬 个人主页:@ChenPi

🐻推荐专栏1: 《C++_@ChenPi的博客-CSDN博客》✨✨✨ 

🔥 推荐专栏2: 《LLinux C应用编程(概念类)_@ChenPi的博客-CSDN博客》✨✨✨
🌺本篇简介  :这一章我们学一下Qt这个软件如何使用以及创建我们第一个Qt程序

Qt 是一个跨平台的 C++开发库

主要用来开发图形用户界面(Graphical User Interface,简 称 GUI)程序

Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部

Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能

比如多线程、 访问数据库、图像处理、音频视频处理、网络通信、文件操作等

所以如果学嵌入式,那么Qt就是其中一个大方向了

本专栏的使用的

  1. Linux操作系统是Ubuntu18.4 
  2. Qt的版本是Qt5.12.9

01新建一个qt项目

在 Ubuntu18 里打开 Qt Creator,也就是左下角软件中心处点击后,

找到 Qt Creator 的图标 后点击打开。

单击文件 Qt Creator 的文件,选择新建文件或者项目。

注意快捷键 Ctrl + N也可以新建项目

 弹出的新建项目如上图

这里我们可以看到有很多模板(包括项目模板和文件和类模板) 可以使用,

包括 Qt,Qt Quick,Qt for Python,…,C++等等。

作为初学者我们选择第一个 Application(Qt)和 Qt Widgets Application,

所谓的模板就是 Qt 为了方便开发程序,在新建工程 时可以让用户基于一种模板来编写程序,

包括 cpp 文件,ui 文件都已经快速的创建,而不用用 户手动创建这些文件。

这样对用户的开发带来极大的便捷。

当然我们也可以自己手动创建项 目,一个一个往里面加也是可以的。

称处输入项目为“hello_world”

这里的项目路径为我的个人配置的目录,你们按需配置即可 

勾选设为默认的项目路径

这样以后做项目实验时都是默认选择这个目录作为项目路径而 不用自己手动选择路径了。

选择下一步。  

默认已经是选择 qmake 编译,主要用 qmake 生成 Makefile 用于项目的编译。点击下一步即 可。  

 这里默认选择的基类为 QMainWindow。

在 Base class 一项中我们还可以看到还有 QWidget 和 QWialog 这样的基类可以选择。

在 C++中学习什么叫基类,简单的来说,

我们创建 的这个项目是基于 QMainWindow 类去开发的。

默认勾选“Generate form”,意思是生成 ui 窗体 文件 mainwindow.ui。

为了学习方便,我们统一默认基类为 QMainWindow,

但是注意,在嵌入 式里一般不需要标题栏,状态栏等,所以常用的是 QWidget 基类。 

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

因为 QWidget 不带窗口标题栏等,嵌入式里最好 QWidget。

后面基本一直下一步就可以了,最后点击完成

02 项目文件介绍

 

 Qt Creator 和其他 IDE 开发软件一样。都是分组管理项目内的各种源文件,

下面是项目内 的文件简介。

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

注意,有时候.pro文件不一定能给你自动修改,需要自己配置,如果编译不了,找不到错误,可以到pro文件看看文件路径啥的对不对

 我们来看一下pro文件吧,刚开始可能不知道这是干嘛的,没事,我们来讲解一下

第 1 行,添加了 Qt 的支持的模块,core 与 gui 库是 Qt 的默认设置。

第 3 行,比较 Qt5 版本,如果是 Qt5 版本,在 main.cpp 中 application 是在 QtWidgets 中的, 因此要包含这个库。

第 5 行和第 11 行,分别配置的是使用 c++11 和添加 QT_DEPRECATED_WARNINGS 定义。

第 18 行,SOURCES 下的是源文件。

第 22 行,HEADERS 下是头文件。

第 25 行,FORMS 下是 ui 界面文件。

第 28 行,部署默认的规则。

第 29 行,qnx:判断是不是 qnx 操作系统,赋值 target.path = /temp/$${TARGET}/bin。

第 30 行,如果是 unix 系统但不是安卓,赋值 target.path = /opt/$${TARGET}/bin。

第 31 行,如果 target.path 为空目录,赋值 INSTALLS += target。

如果需要修改生成目标的可执行程序名字,可赋值 TARGET = xxx。否则 TARGET 将默认 取值为项目的名字。  

大概就是这样,到时候文件多了的时候,编译不通过,说找不到什么文件,但你明明有的话,你可以进入到此目录看下路径对不对

 再来我们看下UI界面吧

①是控件栏,有各种各样的控件,上方的 Filter 是过滤器,输入首写字母就可以快速定到 我们想要找的控件。

 ②显示的是我们的窗口程序了,上面已经带有 MainWindow 对象及其几个子对象,默认 MainWindow 就带有菜单栏和状态栏。

③是对象栏,②处用到的对象都在③处显示。

④是属性栏,点击③处对象栏的某个对象,就可以在④属性栏里编辑它的属性了。属性项 有很多,包括位置,大小,文字,颜色,字体等等。

03 修改 ui 文件显示 hello world

直接通过拖拽的方法把Label放到Ui布局上 

字体大小在左下角可以修改

 

最后我们Ctrl+R就可以编译运行了 

这就是第一个Qt程序了,不过在后面的学习中,我们尽量使用代码编辑吧,这样逻辑性会好些

下章见,谢谢大家

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础——两个常用且容易忘记的知识点

1. replace函数的第三个参数 replace 方法提供了一个可选的参数 count,可以用于指定替换的次数。你可以将 count 设置为 1 来限制替换的次数,只替换第一个匹配项。 下面是使用 replace 方法限制替换次数的示例: date_str "2023/05/1…

二百一十一、Flume——Flume实时采集Linux中的Hive日志写入到HDFS中(亲测、附截图)

一、目的 为了实现用Flume实时采集Hive的操作日志到HDFS中,于是进行了一场实验 二、前期准备 (一)安装好Hadoop、Hive、Flume等工具 (二)查看Hive的日志在Linux系统中的文件路径 [roothurys23 conf]# find / -name…

smarty模版 [BJDCTF2020]The mystery of ip 1

打开题目 点击flag给了我们一个ip 点击hint,查看源代码处告诉了我们要利用这个ip bp抓包,并添加X-Forward-For头 所以这道题是XFF可控 本来联想到XFF漏洞引起的sql注入,但是我们无论输入什么都会正常回显,就联想到ssti注入 我们…

C/C++指针操作整理

C/C指针操作整理 面向曾经学习过指针的人,并非针对究极初学者。 一维指针 数据类型存储的地址,指向数据存储的地址,可以使用 &运算符取变量的地址,将其赋给指针变量。 int a 2; int *p &a;同时因为C/C中数组是连续存储…

Java实现插入排序算法

插入排序算法 (1)概念:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。 (2)一个通俗的比喻: 插入排序就类似于斗地主时&#xf…

CloudCompare 二次开发(23)——计算两点云之间的放缩倍数

目录 一、概述二、代码集成三、结果展示一、概述 使用CloudCompare编程实现计算两点云之间的放缩倍数。具体计算原理见:。 二、代码集成 1、mainwindow.h文件public中添加: void doActionComputeScale(); // 计算两点云的放缩倍数2、mainwindow.cpp文件void MainWin…

vue-element使用html2canvas实现网页指定区域(指定dom元素)截图

直接上代码&#xff1a; <template><el-dialog :visible.sync"printDialogVisible" width"1000px" :close-on-click-modal"false" append-to-body><template><div :id"print_content" ref"print_content&q…

Python网络爬虫的基础理解-对应的自我理解误区

##通过一个中国大学大学排名爬虫的示例进行基础性理解 以软科中国最好大学排名为分析对象&#xff0c;基于requests库和bs4库编写爬虫程序&#xff0c;对2015年至2019年间的中国大学排名数据进行爬取&#xff1a;&#xff08;1&#xff09;按照排名先后顺序输出不同年份的前10…

Linux下通过find找文件---通过修改时间查找(-mtime)

通过man手册查找和-mtime选项相关的内容 man find | grep -A 3 mtime # 这里简单介绍了 -mtime &#xff0c;还有一个简单的示例-mtime n Files data was last modified n*24 hours ago. See the comments for -atime to understand how rounding affects the interpretati…

【已解决】解决Win7虚拟机打开网页报错的情况

因为刚才下载了个虚拟机&#xff0c;同样出现了无法安装VMtools的情况&#xff0c;所以想直接通过虚拟机的浏览器来下载一个补丁&#xff08;因为自己的U盘在虚拟机上面无法识别&#xff0c;应该是太老了Win7&#xff09; 结果发现Win7内置的IE浏览器太拉了。于是向下载一个火…

深度学习记录--神经网络表示及其向量化

神经网络表示 如下图 就这个神经网络图来说&#xff0c;它有三层&#xff0c;分别是输入层(Input layer)&#xff0c;隐藏层(Hidden layer)&#xff0c;输出层(Output layer) 对于其他的神经网络&#xff0c;隐藏层可以有很多层 一般来说&#xff0c;不把输入层算作一个标准…

【ITK库学习】使用itk库进行图像滤波ImageFilter:几何变换:翻转、重采样(未完)

目录 1、itkFlipImageFilter 图像翻转滤波器2、itkResampleImageFilter 重采样图像滤波器 1、itkFlipImageFilter 图像翻转滤波器 该类的主要功能是使输入数据在用户指定的轴上进行翻转。 翻转轴通过函数SetFlipAxes(array) 设置&#xff0c;其中输入是FixArray<bool,Imag…

UML图的各种类型以及软件设计师考试考察的方式

UML建模 前言 常见的UML的类型 UML 比前两题是更难的&#xff08;略高&#xff0c;但是学会就可以了。前两题是&#xff1a;数据流图&#xff0c;数据库的设计&#xff09;&#xff0c;因为UML图有很多类型&#xff1a;用例图&#xff0c;类图与对象图&#xff0c;顺序图&…

3_CSS层叠样式表基础

第3章-CSS层叠样式表基础 学习目标(Objective) 掌握标签选择器的使用掌握类选择器的使用了解id选择器和通配符选择器掌握font属性和color属性的应用 1.HTML的局限性 如果要改变下高度或者变一个颜色&#xff0c;就需要大量重复操作 总结&#xff1a; HTML满足不了设计者的需…

Emacs之dired模式重新绑定键值v(一百三十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

uniapp实战 —— 轮播图【数字下标】(含组件封装,点击图片放大全屏预览)

组件封装 src\components\SUI_Swiper2.vue <script setup lang"ts"> import { ref } from vue const props defineProps({config: Object, })const activeIndex ref(0) const change: UniHelper.SwiperOnChange (e) > {activeIndex.value e.detail.cur…

Python——数据容器

数据容器操作的异同点 项目列表list元组tuple字符串str集合set字典dict元素数量支持多个支持多个支持多个支持多个支持多个元素类型任意任意仅字符任意key&#xff1a;除字典外任意类型&#xff1b;value&#xff1a;任意类型下标索引支持支持支持不支持不支持重复元素支持支持…

yarn link使用(npm link)

使用场景 前端开发中&#xff0c;两个项目相互依赖时&#xff0c;使用yarn link(npm link)链接 例如&#xff1a;A项目依赖于本司自己的UI库B&#xff0c;当我们修改了UI库B中的某些代码时&#xff0c;需本地验证后再发布到私服&#xff0c;此时A项目与UI项目B通过yarn link连…

数据可视化:解锁企业经营的智慧之道

在现代企业管理中&#xff0c;数据可视化已经成为了一项重要的工具。它不仅仅是简单地展示数据&#xff0c;更是提供了深入理解数据、做出更明智决策的方法。作为一名可视化设计从业人员&#xff0c;我经手过一些企业自用的数据可视化项目&#xff0c;今天就来和大家聊聊数据可…

数字化升级,智慧医疗新时代——医院陪诊服务的技术创新

在信息技术飞速发展的今天&#xff0c;医疗服务正迎来数字化升级的新时代。本文将探讨如何通过先进技术的应用&#xff0c;为医院陪诊服务注入更多智慧元素&#xff0c;提升患者和家属的医疗体验。 1. 创新医疗预约系统 # Python代码演示医疗预约系统的简单实现 class Medic…