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

Qt开发——环境搭建

开发环境概述

Qt开发环境需要按照3个部分

1.C++编译器(gcc,cl.exe......不是Visual Studio) 编译器 != IDE 编译器只是IDE调用的一个程序

2.Qt SDK (SDK =>软件开发工具包,当然一般的SDK中会内置编译器,没有的才需要装编译器)

具体安装过程中记得把对应的C++编译器给一起勾选上。

3.需要有一个Qt 的集成开发环境(IDE)

        1)Qt官方提供的Qt Creator(最容易入门,开箱即用,不需要任何额外的配置;虽然使用过程会有bug)

        2)Visual Studio 功能更强,但是需要额外的配置更多,更容易出错。需要给 VS 安装 Qt插件,并且需要包Qt SDK使用 VS的编译器重新编译

        3)Eclipse

说是安装3个东西,其实按照Qt SDK ,另外两个就都有了。

QtSDK下载

Qt 下载官⽹
https://download.qt.io/archive/qt/

国内清华源

https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/

这里我选的是5.14版本

安装QtSDK

没有账号可以注册账号,如果不想注册就把网络断开

记得选择编译器

下边这个也要选

然后就一直下一步直到安装成功

环境变量配置

给Qt配置一下环境变量,当然没有配置也不是不可以用,但是最好还是配置一下

在开始菜单搜索环境变量,弹出此窗口

点击环境变量选项,然后弹出此窗口

有用户变量和系统变量,Windows是支持多用户的,当然一般也不会把自己的电脑给别人用,这里配置哪个都没区别。

其中有个环境变量为Path,Linux中也有个环境变量叫PATH,但是作用是一样的。

在Linux中你输入一个命令,就会去PATH下对应的目录中查找对应的程序。

此处就需要把Qt SDK 中的某个目录加入到Path环境变量中

我安装的是这个目录

D:\code\Qt\QtSDK\5.14.0\mingw73_64\bin

是这个包含了一大堆动态库和exe的目录

为什么要配置环境变量?

让操作系统/Qt Creator 工具,能够找到Qt SDK中提供的exe

也是运行Qt 程序的时候,能够找到对应的.dll动态库

认识Qt SDK 中的重要工具

这几个就是SDK中自带的一些工具程序,也是我们在开发中需要关注的

第一个Qt助手,打开它就是一个文档,到时候可以在这里查函数啥的

第二个Qt 设计师,这是一个图形化的可以通过拖拽控件方式来去设计界面的工具,到时候会结合Creator来使用

第三个Linguist,语言家。支持国际化,有的时候,写的程序要和国际接轨,允许你单独创建一个语言配置文件,把界面中所用到的文字都配置到文件中,并且在文件中提前的把各种语言的翻译都配置进去,就可以起到"一键式切换语言"的效果

第四个没啥好说的就是一个命令行终端,黑框一个,可以在里边写一些命令啥的

最后一个Qt Creator,Qt 的集成开发工具(学习Qt过程中最常用的一个工具)

使用Qt Creator创建项目

左上角就可以创建

应用程序,如果使用Qt写一个GUI程序,就应该选择这个。

右侧还有许多选项,我们要选的是第一个,一个图形化界面的模板

第二个是控制台程序模板TUI

再下面还有Qt for python ,Qt还可以用Python、java来编写

以上的都是传统的开发GUI的方式叫做Qt Widget

后面的都是Qt Quick,Qt搞出的一套新的用来开发GUI 的方式。

选好后就choose,然后填写名称和路径

然后build system就有三个选项来选

构建系统,通过Qt写的程序,涉及到一系列"元编程"技术。

元编程:通过代码来生成代码

Qt框架会再编译的时候,自动先调用一系列的生成工具,基于你自己写的代码,生成一系列的其他的C++的代码,最终编译的代码也是最后生成的这些代码

主要还是选择qmake,它是一个老牌的Qt构建工具;Cmake也是一个老牌的,并非Qt专属的一个构建工具,Qbs是新一代的但是用的人非常少。

注意一下这个 base class:使用QT creator创建项目,会自动生成一些代码出来。生成的代码就包含了一个类,此处就是要选择这个自动生成的类的父类是谁

那么就有一下三个选项

第一个:完整 的应用程序窗口(可以包含菜单栏、工具栏、状态栏...)

第二个:表示一个控件(窗口上的一个具体的元素:输入框、按钮、下拉框、单选按钮......)

第三个:表示一个对话框

这里我们选第二个,比较简单

此处生成的文件名和类名是相关联的

当然这样的关联并非强制的(推荐大家搞成一样的)

From file非常关键

Qt 中创建的图形化界面的程序,有两种方式:

1、直接通过C++代码的方式创建界面

2、通过from file ,以图形化的方式来生成界面

此时就可以使用Qt Designer或者直接使用 Qt Creator来编辑这个ui文件从而以图形化的方式快速方便的生成图形界面

选择 翻译文件 (对应的语言)此处暂时不关注,直接下一步

选择一下,基于哪个编译器的Qt SDK来构建后续代码

none或者git,然后点击完成

项目就创建好了。

左下角有个运行符号,就可以运行代码

项目代码解释

首先就是一个mian.cpp文件,里边包含了一个简单的main函数

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

两个参数,argc命令行参数的个数,argv命令行参数的内容

然后以这两个参数构建了一个对象,编写一个Qt 的图形化界面工具,一定需要有QApplication对象。

然后又创建了一个Widget w,刚才在创建项目是不是填写了生成的类名嘛。于是Qt就给我们生成了Widget这样一个类,定义了这么一个对象,并且调用了show这样一个方法。

也就是说,创建一个控件对象,并显示出来。.show方法让控件显示出来,.hide方法让控件隐藏。Widget的父类是QWidget,这两个方法都是QWidget提供的

最后return a.exec ,那么a就是上面创建的对象,而这个exec方法就是让程序执行起来

之前Linux中也提到过六个函数(本质上是一个)叫exec,进程程序替换,把可执行文件中的代码和数据,替换到当前进程中(有点像夺舍)

Qt中的exec和Linux的没有任何关系,只是名字恰好是一样

widget

那么我们再来看一下Widget这个类,左边Headers文件夹中有头文件,Sources中有.cpp文件

先看一下.h里头放的是什么

header guard 保证头文件只包含一次,更推荐写作#pragma once 

#ifndef WIDGET_H
#define WIDGET_H

然后就是包含一个头文件,在下面有一个命名空间,这个先不管,其实也就是声明了一个类

然后就能看到类的一个情况,首先是继承自QWidget——创建项目时选择的父类,QtSDK内置,要想使用这个类就要包含对应的头文件,当然上面包含了

class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;
};

在Qt的设定中,内置的类,包含的头文件的名字就是和类名一致的。当然也不是用到的所有的Qt的类都需要显示包含头文件,C++头文件可能是间接包含的,后续写代码的原则,一个Qt的类如果拿来就可以直接用,说明对应的头文件已经被间接包含过的,那么就不需要额外的去显示包含。

如果这个类提示找不到定义啥的,手动显示的把对应的头文件包含一下就行了

然后就是Q_OBJECT,一个Qt内置的宏,宏本质上是一个文本替换。Q_OBJECT展开之后就会生成一大堆的代码。这个宏什么时候才需要用到呢?当我们需要使用Qt信号槽这样一个机制的时候。

Qt有一个非常核心的机制:"信号"和"槽",当某个类想要使用这个机制的时候,就要引入Q_OBJECT

再下面就是构造和析构,构造函数的参数需要讲一下

Qt中引入了"对象树"机制,创建的Qt的对象,就可以把这个对象给挂到树上,往树上挂的时候就需要指定"父节点"

最后Ui::Widget *ui;和我们的form file密切相关
然后再看一下widget.cpp中有什么东西。

首先包含了两个头文件

#include "widget.h"
#include "ui_widget.h"

第一个是创建项目生成的头文件,第二个是form file被qmake生成的头文件

再下面就是构造函数具体的定义

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}

就是给ui这个成员变量创建实例,然后调用ui中的函数setupUi(this),就是把form file生成的界面和当前的widget关联起来

然后就是析构函数delete ui;

ui文件

关键要点form file,展开左边的Forms文件夹中就有一个widget.ui文件

如果双击这个文件,那么再QT creator中就会自动切换到设计的标签页

当双击ui文件,此时Qt creator就会调用Qt designer ,打开ui文件。此时我们看的就是一个图形化的界面编辑器。

中间部分就是生成的程序窗口,左边则为一些Qt中内置的控件,可以直接拖拽控件到程序窗口中,就可以创建出具体的界面了。右边是编辑属性,每个控件都有很多属性,就影响到控件具体的行为了。

此时再点击左侧边栏的编辑按钮,就会显示.ui文件的本身代码,这个格式称为xml格式

这里的xml和html非常类似,都是使用成对的标签来表示数据。xml这里的标签,有哪些标签,都表示什么含义,这个是程序员自定义的。现在我们只需要知道ui文件本质上是一个xml即可。此处约定xml标签的含义就类似于Linux网络中自定义应用层协议

而html的标签是啥含义是有一个专门的标准委员会来约定的。

Qt中使用xml文件就是去描述程序的界面是啥样的。进一步的qmake会调用相关的工具,依据这个xml文件生成一些C++代码,从而把完整的界面构造出来

工程文件

在我们生成的项目文件中还有一个重要的东西叫Empty.pro

.pro Qt项目中的工程文件,也是qmake工具构建时候的重要依据

QT       += core gui

要引入的Qt模块

下一句先不管,在下一个是一个编译选项c++11

CONFIG += c++11

接下来比较关键的是这里

SOURCES += \main.cpp \widget.cppHEADERS += \widget.hFORMS += \widget.ui

描述了当前项目中,参与构建的文件都有什么(编译器想要编译哪些文件),这个不需要我们手动修改,Qt creator会帮我们自动维护好。

再下面的就不去关注。

.pro就类似于Linux中的Makefile文件。

中间文件

上面看到的.h  .cpp .pro  .ui都是源代码,如果编译运行QT项目,构建过程中还会生成一些中间文件。右键.pro,选择在explorer中显示。

打开文件管理器,看看项目对应的目录是什么样子的。

运行一次程序之后就会在项目目录 并列的地方,就会多出来一个bulid-xxxxx目录,这个目录里边就是该项目运行过程中生成的一些临时文件。

进入此文件

里边还有一个makefile,只不过这个makefile是qmake自动生成的。

在下面还有一个ui_widget.h文件,这个文件是widget.ui 和xml生成的.h文件

那么里边都有啥呢?

定义了一个类,Qt自动生成的代码,这个代码会在setupUi方法中,生成出界面的具体细节

其实前边也有提到,就是这个,看起来不一样其实是一个东西。

exe就是我们之前运行的窗口

http://www.dtcms.com/a/585864.html

相关文章:

  • 32HAL——RTC时钟
  • C#知识补充(一)——ref和out、成员属性、万物之父和装箱拆箱、抽象类和抽象方法、接口
  • 专业的设计网站建设网站做地区定位跳转
  • 网站做三层结构南京建设网站哪家好
  • pyautocad 获取选择线段的近似最小包围盒 (OBB) 三分搜索
  • Git Commit 高频提示详解:用户名邮箱配置及其他常见提示解决方案
  • 打开网站图片弹入指定位置代码网络域名备案查询
  • 豆包 Spring 常用注解详解及分类
  • 企业网站建设收费最大的网站开发公司
  • 服务器运维(六)跨域配置 Preflight 问题——东方仙化神期
  • 第三次作业-第四章网站搭建
  • React 17
  • Linux:多路转接
  • 为什么国内禁用docker呢?
  • 石家庄行业网站深圳建筑工地招工招聘信息
  • 云溪网络建站宝盒wordpress发文章套模版
  • 人在虚弱的时候真的能看到鬼
  • zabbix原生高可用集群应用实战
  • flink1.20.2环境部署和实验-1
  • 网站主目录程序开发步骤不包括
  • 云手机技术是如何实现的?
  • 现有rest api转换为MCP工具 存量api改造为MCP Server
  • MyBatis:性能优化实战 - 从 SQL 优化到索引设计
  • 【Golang】常见数据结构原理剖析
  • 做百度推广得用网站是吗做小说网站做国外域名还是国内的好处
  • Ubuntu 复制王者:rsync -av 终极指南 —— 进度可视化 + 无损同步,效率甩 cp 几条街!
  • ubuntu磁盘管理、磁盘扩容
  • 专业设计网站排名百达翡丽手表网站
  • 广度优先搜索
  • 高端网站建设公司名称动物自己做的网站