【Qt】探索Qt框架:跨平台GUI开发的利器

文章目录

  • 1. Qt框架概述
    • 1.1. Qt框架的优点
    • 1.2. Qt框架支持的系统
    • 1.3. Qt开发环境
  • 2. 搭建 Qt 开发环境
    • 2.1. Qt SDK 的下载和安装
    • 2.2. 新建项目:
  • 3. Qt 框架内容简介
  • 总结

在当今软件开发领域,跨平台性和用户界面的友好性是至关重要的。而Qt框架作为一款跨平台的C++图形化界面应用程序框架,为开发者提供了强大的工具和资源,使得开发者能够更加便捷地创建出高质量、跨平台的应用程序。本文将介绍Qt框架的优势、支持的系统、开发环境以及对程序员的意义。

1. Qt框架概述

Qt是一个跨平台的C++图形化界面应用程序框架。
框架:本质上就是一群大佬发明出来的,方便咋们普通程序员,写出来的代码比较靠谱。(限制程序员的自由)

库 vs 框架:

  • 都属于: 大佬吧一些代码写好了,让你去使用。
  • : 被程序员调用的。(程序员是主题)
  • 框架: 则是占主体的,程序员配合框架,完善填充框架中的一些细节。

Java对于框架更加依赖,编写C++代码,框架也很重要,C++生态是割裂的,离散的,不像Java。
C++不像Java存在一些巨无霸社区/大厂,有各自的框架。像Qt这种,能够被大家共同认可的框架,在C++生态中是不多见的。

1.1. Qt框架的优点

Qt框架是由大佬们发明的一款C++图形化界面应用程序框架,它为开发者提供了一系列的工具和组件,帮助开发者快速构建出高性能、跨平台的应用程序。与其他框架相比,Qt框架具有以下优势:

  • 跨平台性:Qt几乎支持所有的平台,包括Windows、Linux、Mac以及嵌入式系统,为开发者提供了更广阔的应用范围。
  • 简单易用:Qt提供简单易用的接口,容易上手,学习Qt框架对学习其他框架具有参考意义,有助于提升开发效率。
  • 内存管理:Qt框架在一定程度上简化了内存回收机制,使得开发者能够更专注于应用程序的逻辑实现而不是底层细节。
  • 高效开发:Qt框架能够快速构建应用程序,提高开发效率,帮助开发者更快地将想法转化为实际的产品。
  • 活跃社区:Qt拥有一个活跃的社区,为开发者提供了丰富的资源和支持,市场份额在逐步上升。
  • 嵌入式开发:Qt框架也支持嵌入式系统开发,为嵌入式开发者提供了强大的工具和支持。

1.2. Qt框架支持的系统

Qt框架广泛支持各种操作系统,包括但不限于:

  1. windows(各个版本)
  2. Linux(各种发行版),尤其是Linux中的KDE桌面基于Qt构建的。
  3. Mac系统
  4. 嵌入式系统

1.3. Qt开发环境

要开始使用Qt框架进行开发,需要安装以下三个部分:

  1. C++编译器(gcc,cl.exe…不是Visual Studio)
  2. Qt SDK(软件开发工具包)
  3. 需要一个Qt的集成开发环境(IDE)
    • Qt官方提供的Qt Creator
    • Visual Studio
    • Eclipse

2. 搭建 Qt 开发环境

Qt 支持多种开发工具,其中比较常用的开发工具有:Qt Creator、Visual Studio、Eclipse.

2.1. Qt SDK 的下载和安装

Qt 下载官网:http://download.qt.io/archive/qt/
在这里插入图片描述
在这里插入图片描述
它是Qt SDK 中内置的 C++ 编译器
就是一个windows 版本的 gcc/g++

给装好的 Qt,配置一下环境变量(不是必须的)
在这里插入图片描述

为啥要配置这个环境变量?

  1. 让操作系统 / Qt Creator工具,能够找到Qt SDK 中提供的 exe
  2. 也是运行 Qt 程序的时候,能否找到对应 .dll 动态库。 环境变量,也可以理解成一种简单的"进程间通信" 机制。

2.2. 新建项目:

在这里插入图片描述
应用程序,如果使用Qt写一个GUI程序,就应该选这个。
在这里插入图片描述
在这里插入图片描述

构建系统,通过Qt写的程序,涉及到一些"元编程"的技术,通过代码来生成代码。

Qt框架在编译的时候,自动调用一系列的工具,基于你自己写的代码,生成一系列的其它的C++代码,最终编译的代码,也是最后生成的这些代码。
在这里插入图片描述

3. Qt 框架内容简介

// main.cpp
#include "widget.h"#include <QApplication>  int main(int argc, char *argv[]) //main 的形式就是命令行参数
{QApplication a(argc, argv); //编写一个 Qt 的图形化界面程序,一定要有 QApplication 对象!Widget w; //widget 刚刚才创建项目的时候填写的类名w.show();	// .show()方法让控件显示出来  .hide() 方法让空间隐藏// Widget 的父类是 QWidget,都是QWidget提供的。return a.exec();	// .exec() 让程序跑起来
}

在 Linux 中,也学过六个函数(当然,本质上是一个),进程替换,吧可执行文件中的代码和数据,替换到当前进程中。
当前Qt中的 exec 和 Linux 中的 exec 没有任何关系!只是名字恰好一样。

// widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget // Qwidget:创建项目的时候选择的父类// Qt SDK 内置//想要使用这个类,就需要包含对应的头文件	
{Q_OBJECT	// Q_OBJECT 是一个Qt内置的宏,宏本质上是文本替换// Qt中有一个非常核心的机制,“信号”和“槽”, 和它有关联public:Widget(QWidget *parent = nullptr); // Qt中引入了“对象树”机制// 创建的Qt的对象,就可以把这个对象树给挂到对象树上// 往对象树上挂的时候需要指定“父节点”// 及数据结构中所学过的一个节点只能有一个父节点,此处对象树,就是一个普通的 N 叉树。~Widget();private:Ui::Widget *ui;		// 和 form file 密切相关。
};
#endif // WIDGET_H
// widget.cpp
#include "widget.h" // 创建项目生成的头文件
#include "ui_widget.h"	// form file 被 qmake 生成的头文件Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) // 把 form file 生成的界面和当前 widget 关联起来
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}

关键要点 form file
在这里插入图片描述
当直接双击 ui 文件,此时 Qt Creator 就会调用 Qt Designer, 打开 ui 文件(图形化的界面编辑器)
在这里插入图片描述

点击左侧边栏的“编辑”按钮,此时显示的内容,就是 .ui 文件的本体了。这个格式被称为 xml 格式,xml 和 html
非常相似,都是使用成对的标签来表示数据。

xml这里的标签,有哪些标签,都表示什么含义,这个是程序员自定义的。此处看到的这些标签,就是开发 Qt 的大佬们来约定的。

(这里的标签具体是什么含义,咋们不需要关注)只需要知道 ui 文件本质上是一个 xml 即可。

此处约定的 xml 标签的含义,就类似于之前 Linux 网络原理中学过的一个话题,自定义应用层协议。

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

.pro Qt项目的工程文件 也是 qmake 工具构建时的重要依据。
在这里插入图片描述

QT       += core gui  // 要引入的 Qt 模块greaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0// 描述了当前项目中,参与构建的文件都有啥(编译器需要参与构建的文件都有哪些)
SOURCES += \main.cpp \widget.cppHEADERS += \widget.hFORMS += \widget.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

.pro 类似于之前 Linux 中学过的 makefile 文件。(makefile 其实是一个非常古老的技术了)
qmake 搭配 .pro 起到的作用就和 makefile 是类似的。

上面看到的 .h .cpp .pro .ui 都是源代码。
如果编译运行Qt项目,构建过程中还会生成一些中间件
在这里插入图片描述
运行一次后会生成一个build-… 的目录,在这个目录里面就是该项目运行过程中生成的一些零时文件

在这里插入图片描述

总结

本文介绍了Qt框架作为一款跨平台的C++图形化界面应用程序框架的优势、支持的系统、开发环境以及对程序员的意义。Qt框架以其跨平台性、简单易用的接口、高效开发和活跃的社区而闻名,支持多种操作系统包括Windows、Linux、Mac以及嵌入式系统。搭建Qt开发环境需要安装C++编译器、Qt SDK和一个集成开发环境,常用的有Qt Creator、Visual Studio和Eclipse。文章还简要介绍了Qt框架的内容,包括主要文件结构和关键要点。 Qt框架的出现为开发者提供了强大的工具和资源,使得开发高质量、跨平台的应用程序变得更加便捷和高效。

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

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

相关文章

使用CipherTrust透明加密勒索软件保护阻止勒索软件的传播

Thales实验室对十起勒索攻击的软件进行测试&#xff0c;效果理想。另外对于这些常见的勒索攻击方式也进行了大量模拟&#xff0c;都很好的进行了保护。 BleepingComputer.com上的文章涵盖了过去几个月(2024年1月至3月)最近的勒索软件攻击。本博客将展示&#xff0c;如果在这些受…

基于springboot实现大型商场应急预案管理系统项目【项目源码+论文说明】计算机毕业设计

基于SpringBoot实现大型商场应急预案管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了大型商场应急预案管理系统的开发全过程。通过分析大型商场应急预案管理系统管理的不足&#xff0c;创建了一个…

Vue2 —— 学习(十)

一、vue-resource 库 了解即可 在之前的 vue 版本中经常使用 这个库发送 ajax 请求 现在建议使用 axios 我们可以通过使用 vue-resource 库 来实现发送 ajax 请求 它是 vue 的一个插件库 Vue.use() 就能使用我们的插件了 我们引入后去 我们的实例对象 vc 中查看 发现出现…

如何增强Java GCExcel API 的导入和导出性能

前言 GrapeCity Documents for Excel (以下简称GcExcel) 是葡萄城公司的一款服务端表格组件&#xff0c;它提供了一组全面的 API 以编程方式生成 Excel (XLSX) 电子表格文档的功能&#xff0c;支持为多个平台创建、操作、转换和共享与 Microsoft Excel 兼容的电子表格&#xf…

前端工程化02-复习jQuery当中的插件开发

2、jQuery插件开发 在我们开发的时候、有时候jQuery提供的方法并不能满足我们的需求&#xff0c;如果我们想给jQuery扩展一些其他的方法&#xff0c;那这种情况下&#xff0c;可能会需要写一个插件 jQurey官网&#xff1a;jquery.com 例如一些、图片懒加载插件、滚动的插件、…

自动售卖团餐:借助智享直播AI实景无人直播系统,团餐自动售卖,无需人工参与,省时高效。

在科技飞速发展的今天&#xff0c;直播行业迎来了一场前所未有的变革。过去&#xff0c;传统的直播方式需要大量设备和人力投入&#xff0c;然而如今&#xff0c;一款名为"智享直播"的AI实景无人直播系统正以其简单、有趣的特性改变着这一局面。仅仅凭借一部手机&…

vue项目前端axios跨域请求处理问题

在我的服务器里面新建了一个txt文档&#xff0c;但在vue项目里面对这个文档发起请求的时候因为是ip地址请求&#xff0c;跨域请求失败&#xff0c;在配置了vue.config.js的请求代理后得以解决 报错示例&#xff1a; 解决方法&#xff1a; 1、在vue.config.js中配置跨越请求代…

Netty学习——实战篇6 ProtoBuf实战-单类型数据

1 ProtoBuf实战&#xff1a;需求 编程程序&#xff0c;使用ProtoBuf完成如下功能 1、客户端发送一个Student POJO对象到服务器(通过ProtoBuf编码) 2、服务端能接收Student POJO对象&#xff0c;并显示信息(通过ProtoBuf解码) 1.1 编写Student.proto文件 首先在pom.xml中导入pr…

【网络协议】 TCP与UDP协议区别及应用场景深度分析

1. TCP与UDP简介 1.1 TCP 1.1 定义 TCP&#xff08;TransmissionControl Protocol&#xff09;传输控制协议。 是一种可靠的、面向连接的协议&#xff08;eg:打电话&#xff09;、传输效率低全双工通信&#xff08;发送缓存&接收缓存&#xff09;、面向字节流。使用TCP的应…

52-M.2 E Key-WIFIbluetooth模块电路设计

视频链接 M.2 E Key-WIFI & bluetooth 模块电路设计01_哔哩哔哩_bilibili M.2 E Key-WIFI&bluetooth模块电路设计 1、WIFI&bluetooth模块 1.1、WiFi&bluetooth模块&#xff08;京东&#xff09; AX200和9260这两个型号只支持win10 64位的系统! 随着最新的…

基于非线性控制策略的电力电子电路——DC-DC电路的3种滑模控制器【MATLAB/simulink】

第一种&#xff0c;滞环滑模控制器Buck电路 在滑模控制系统中&#xff0c;采用滞环技术&#xff0c;直接将切换函数转换成开关控制信号&#xff0c;滞环技术被看做一种降低系统结构的切换频率的调制方法&#xff0c;业界也把基于滞环滑模技术实现的滑模控制称为直接滑模控制技…

# 从浅入深 学习 SpringCloud 微服务架构(二)模拟微服务环境(1)

从浅入深 学习 SpringCloud 微服务架构&#xff08;二&#xff09;模拟微服务环境&#xff08;1&#xff09; 段子手168 1、打开 idea 创建父工程 创建 artifactId 名为 spring_cloud_demo 的 maven 工程。 --> idea --> File --> New --> Project --> Ma…