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

news2024/9/20 2:43:59

文章目录

  • 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++存在一些巨无霸社区/大厂,有各自的框架。像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_NAMESPACE

class 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 += widgets

CONFIG += 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.cpp

HEADERS += \
    widget.h

FORMS += \
    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.coloradmin.cn/o/1611975.html

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

相关文章

<计算机网络自顶向下> TCP拥塞

目录 TCP拥塞控制机制 TCP拥塞感知 TCP速率控制方法 TCP拥塞控制和流量控制的联合动作 TCP拥塞控制策略 TCP吞吐量 TCP公平性 TCP拥塞控制机制 端到端的拥塞控制机制 路由器不向主机提供有关拥塞的反馈信息 路由器负担较轻 符合网络核心简单的TCP/IP架构原则 端系统根据自…

【github主页】优化简历

【github主页】优化简历 写在最前面一、新建秘密仓库二、插件卡片配置1、仓库状态统计2、Most used languages&#xff08;GitHub 常用语言统计&#xff09;使用细则 3、Visitor Badge&#xff08;GitHub 访客徽章&#xff09;4、社交统计5、打字特效6、省略展示小猫 &#x1f…

浅谈命理学的男女婚姻篇

对于中国人来说&#xff0c;八字预测已成为生活中不可缺少的组成部分&#xff0c;不懂八字预测&#xff0c;就不会真正了解中国的传统文化。八字预测经历几千年的风风雨雨&#xff0c;是一种古老的中国命理学&#xff0c;通过生辰八字的天干地支的组合&#xff0c;可以推测一个…

[阅读笔记21][RA-CM3]Retrieval-Augmented Multimodal Language Modeling

这篇论文是meta联合斯坦福在23年4月发表的论文&#xff0c;提出了一个使用外部知识检索增强的多模态模型。 这篇模型提出的RA-CM3模型是第一个能够检索并生成图像文本的多模态模型&#xff0c;在图像文本生成任务上优于现有的多模态模型&#xff0c;同时使用更少的训练量。 RA-…

模型 框架效应

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。部分真相不等于真相。 1 框架效应的应用 1.1 框架效应在营销策略上的应用 亚洲航空公司面临的挑战是如何在竞争激烈的航空市场中吸引更多的顾客&#xff0c;并提高机票的预订率。这家低成本航空公司…

2.Vue简介

Vue简介 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;V…

Scala的函数至简原则

对于scala语言来说&#xff0c;函数的至简原则是它的一大特色。下面让我们一起来看看分别有什么吧&#xff01; 函数至简原则&#xff1a;能省则省&#xff01; 初始函数 def test(name:String):String{return name }1、return可以省略&#xff0c;Scala会使用函数体的最后一…

排序算法集合

912. 排序数组 趁着这道题总结下排序方法 1.快速排序 算法描述 1.从数列中挑出一个元素&#xff0c;称为"基准"&#xff08;pivot&#xff09;&#xff0c; 2.重新排序数列&#xff0c;所有比基准值小的元素摆放在基准前面&#xff0c;所有比基准值大的元素摆在基…

网络安全基础技术-常见web漏洞之XSS跨站脚本攻击

首先&#xff0c;我们来探究XSS&#xff08;跨站脚本攻击&#xff09;的基本概念。简而言之&#xff0c;这种攻击方式涉及将用户的输入错误地作为前端代码执行。在Web应用领域&#xff0c;前端代码通常由HTML、CSS和JavaScript三大构件组成&#xff1a; HTML&#xff08;超文本…

力扣HOT100 - 19. 删除链表的倒数第N个节点

解题思路&#xff1a; 链表题目&#xff1a;哑节点、栈、快慢指针&#xff08;双指针&#xff09; 方法一&#xff1a;计算链表长度 class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dum new ListNode(0, head);int len getLen(head);…

binary tree Leetcode 二叉树算法题

144.二叉树的前序遍历 前序遍历是&#xff1a;根-左-右 所以记录序列的的时候放在最前面 递归 class Solution {List<Integer> ans new ArrayList<>();public List<Integer> preorderTraversal(TreeNode root) {if(root null) return ans;ans.add(root…

书生·浦语大模型实战营Day05作业

作业 基础作业 完成以下任务&#xff0c;并将实现过程记录截图&#xff1a; 配置 LMDeploy 运行环境: 书生浦语大模型实战营Day05LMDeploy实践 以命令行方式与 InternLM2-Chat-1.8B 模型对话: 书生浦语大模型实战营Day05LMDeploy实践 进阶作业 完成以下任务&#xff0c;并将…

PCIe总线-PCIe配置空间介绍(三)

1.概述 配置空间是PCIe设备/桥的标识符&#xff0c;其保存了设备/桥的信息。主机在枚举设备/桥的时候需要先访问配置空间&#xff0c;获取设备厂家、型号、类型、所需资源等信息&#xff0c;然后再分配资源&#xff0c;最后才能访问PCIe设备的存储或IO地址空间。PCIe总线规定了…

JavaScript之分时函数、分时间段渲染页面、提高用户体验、参数归一化、高阶函数、分段、appendChild、requestIdleCallback

MENU 前言效果图html原始写法优化方式一(参数归一化)优化方式二(当浏览器不支持requestIdleCallback方法的时候)优化方式三(判断环境) 前言 当前需要向页面插入十万个div元素&#xff0c;如果使用普通的渲染方式&#xff0c;会造成延迟。这时候就需要通过分时函数来实现渲染了。…

【R数据分析-基础】

R语言介绍 为什么使用R&#xff1f; R&#xff1a;数据分析与可视化平台 R的获取和安装 http://cran.r-project.org 免费下载 一、R、Rtools安装 R语言&#xff1a; 免费开源 支持多平台&#xff0c;包括Windows、UNIX、Mac OS 擅长统计与可视化 Rtools&#xff1a;R语言…

Android安卓写入WIFI热点自动连接NDEF标签

本示例使用的发卡器&#xff1a;Android Linux RFID读写器NFC发卡器WEB可编程NDEF文本/网址/海报-淘宝网 (taobao.com) package com.usbreadertest;import android.os.Bundle; import android.view.MenuItem; import android.view.View; import android.widget.EditText; impo…

C++从入门到出门

C 概述 c 融合了3中不同的编程方式&#xff1a; C语言代表的过程性语言C 在C语言基础上添加的类代表的面向对象语言C 模板支持的泛型编程 1、在c语言中头文件使用扩展名.h,将其作为一种通过名称标识文件类型的简单方式。但是c得用法改变了&#xff0c;c头文件没有扩展名。但是…

大数据平台搭建2024(二)

二&#xff1a;Hive安装 只在node01上操作 1 安装MySQL 8.0 最小化安装需要安装这个 yum install -y wget1-1 下载MySQL的yum源 wget http://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm检查是否安装成功 rpm -qpl mysql80-community-release-el7-7.n…

[Collection与数据结构] 二叉树(三):二叉树精选OJ例题(下)

1.二叉树的分层遍历 OJ链接 上面这道题是分层式的层序遍历,每一层有哪些结点都很明确,我们先想一想普通的层序遍历怎么做 /*** 层序遍历* param root*/public void levelOrder1(Node root){Queue<Node> queue new LinkedList<>();queue.offer(root);while (!qu…