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

C++入门(06)安装QT并快速测试体验一个简单的C++GUI项目

文章目录

  • 1. 清华镜像源下载
  • 2. 安装
  • 3. 开始菜单上的 QT 工具
  • 4. 打开 Qt Creator
  • 5. 简单的 GUI C++ 项目
    • 5.1 打开 Qt Creator 并创建新项目
    • 5.2 设计界面
    • 5.3 添加按钮的点击事件
    • 5.4 编译并运行项目
  • 6. 信号和槽(Signals and Slots)

这里用到了C++类与对象的很多概念

1. 清华镜像源下载

https://mirrors.tuna.tsinghua.edu.cn/qt/archive/online_installers/4.8/?C=M&O=D
在这里插入图片描述
在这里插入图片描述

2. 安装

安装的时候可以注册,填写邮箱,设置密码,会打开网页填写表单,再到邮箱里确认等等,然后就可以继续下一步

以下过程界面可能有疏漏,看看大体过程
在这里插入图片描述
开源义务,下一步
在这里插入图片描述
在这里插入图片描述
可以点选下面一个
在这里插入图片描述

这里路径可改,我默认了
选了两个tools :Desktop 和 DesignStudio
主要是没用过,没经验,也就不自定义安装了
根据字面意思,选了一个桌面开发、一个设计
暂时对Android 汽车操作系统应用程序和移动开发没有需求
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
有个界面是告知我大约5.2GB
接着是一段安装过程,根据网络情况,大约耗时20分钟在这里插入图片描述
安装完成
在这里插入图片描述

3. 开始菜单上的 QT 工具

安装完毕后,开始菜单
在这里插入图片描述

  • Qt Creator 14.0.1 (Community)
    主要的开发环境和 IDE,编写、编辑、调试和构建 Qt 应用程序

  • Qt Design Studio
    专注于 GUI 设计,设计界面,导入到 Qt Creator 中进行逻辑开发

  • Qt 6.7.2 (MinGW 11.2.0 64-bit)
    不需要直接打开,被 Qt Creator 调用的编译工具链

  • Designer 6.7.2 (MinGW 11.2.0 64-bit)
    独立的界面设计工具,对于简单的 UI 设计,使用 Qt Creator 内置的功能

  • Assistant 6.7.2 (MinGW 11.2.0 64-bit)
    查阅 Qt 的官方文档和 API 说明。

  • Linguist 6.7.2 (MinGW 11.2.0 64-bit)
    本地化工具,为 Qt 应用程序进行多语言支持

  • Qt Maintenance Tool
    Qt 的维护工具,更新或更改 Qt 安装时使用

    4. 打开 Qt Creator

Qt Creator,所有的开发、设计、调试功能都在这里集成,使用 Qt 的主要平台
点击
在这里插入图片描述
界面最底下有一行,在帮助里可以再次打开
在这里插入图片描述

5. 简单的 GUI C++ 项目

设计一个基本的窗口应用程序,放置一个按钮,点击按钮时会显示一条消息

5.1 打开 Qt Creator 并创建新项目

(1)打开 Qt Creator,在主界面上,点击 “新建项目”(或选择“文件” > “new project…”)
在这里插入图片描述
(2)在“项目”类别下,选择 “Application” > “Qt Widgets Application”,然后点击 “选择”
在这里插入图片描述
Qt Widgets Application 是 Qt 框架中的一种应用程序类型,用于开发传统的桌面图形用户界面(GUI)应用程序
每个 Widgets 就是一个控件,如按钮 (QPushButton)、文本框 (QLineEdit)、列表 (QListView)、窗口 (QMainWindow) 等
Qt Widgets 应用程序的典型结构:
Main Window (QMainWindow),主窗口,包含菜单栏、工具栏、状态栏等
各类控件(按钮、文本框)可以放置在主窗口中
当控件发生某个事件(如按钮被点击)时,它发出一个信号,槽函数可以捕捉这个信号并执行相应的代码

(3)给项目取一个名称(如 “MyFirstQtApp”),并选择项目的保存路径。点击 “下一步”
在这里插入图片描述
(4)构建系统
三个选项:qmake、CMake 和 Qbs

  • qmake
    Qt 自带的构建系统,集成良好,适合快速上手,易于配置,特别适合小型项目,快速创建和测试 GUI 应用程序。
    逐渐被 CMake 所取代,官方推荐新项目使用 CMake
  • CMake
    逐渐成为 Qt 项目推荐的构建工具。
    能够管理复杂的构建配置,广泛支持各类编译器和开发工具,跨平台,易于与第三方库集成
  • Qbs (Qt Build Suite)
    逐步被官方弃用。

这里只是想快速体验 Qt 的开发流程,选择 qmake
在这里插入图片描述
(5)Details
保持默认的类名称和基类设置, “下一步”
在这里插入图片描述
(6)Translation
这个界面是 Qt 项目设置中的 Translation File(翻译文件) 配置界面,主要为应用程序添加多语言
只是想创建一个简单的 GUI 项目,其中包含一个按钮和一个消息框,没有复杂的多语言需求,因此保持默认的 <无> 即可
在这里插入图片描述

(7)构建套件(Kit)
默认即可。
配置项目编译和运行环境的集合,编译器、Qt 版本、调试器等。它定义了如何编译和运行你的项目。每个 Kit 对应不同的开发平台和配置,比如 Windows、Linux、调试版本、发布版本等
在这里插入图片描述
Desktop Qt 6.7.2 MinGW 64-bit
当前配置的构建套件,指定了使用 Qt 6.7.2 版本和 MinGW 64 位编译器。这是一个标准的配置,适合大多数 Windows 桌面应用程序的开发。
Debug生成带调试信息的可执行文件,开发阶段用来调试代码。
Release生成优化后的可执行文件,没有调试信息,适合发布和分发应用程序
Profile性能分析的配置
对一个简单项目来说,保持默认构建套件

Python 3.12.4,Qt 支持 Python 的集成,可以用于 Qt for Python 项目,当前开发的是一个 C++ GUI 项目,不选

点击 “下一步”

(8)汇总
在这里插入图片描述

点击完成,界面如下
在这里插入图片描述

5.2 设计界面

在项目树中,找到并双击 mainwindow.ui 文件
在这里插入图片描述
打开 Qt Designer设计界面
在左侧的 Widget Box 中找到 Push Button(按钮),拖放到窗口中央
在这里插入图片描述
在右侧的 属性面板中设置按钮的 text 属性为 “Click Me”
在这里插入图片描述
在这里插入图片描述

5.3 添加按钮的点击事件

(1)选中按钮,在右侧 属性面板中找到 “objectName”,确保它的名称是 pushButton
可以更改,pushButton1,pushButton2… 或者有意义的名字,根据需要命名,C++类的对象的名称,理解为变量名,代码里引用的时候要和这里保持一致

在这里插入图片描述
Ctrl + s

(2)左侧编辑,双击 mainwindow.h,在 mainwindow.h 文件中,声明槽函数 onButtonClicked()
在这里插入图片描述

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onButtonClicked();  // 声明槽函数private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

在这里插入图片描述
槽函数声明位置:onButtonClicked() 必须声明在 private slots: 下
确保mainwindow.cpp 文件构造函数中 connect() 调用的槽函数名与声明和实现完全一致。

(3)mainwindow.cpp 文件
在 mainwindow.cpp 中实现构造函数 MainWindow::MainWindow 和槽函数 onButtonClicked()
头文件和实现文件同步更新:如果修改了槽函数,确保同时修改 mainwindow.h 和 mainwindow.cpp 文件中的声明和实现
有注释的地方是添加的

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>  // 用于显示消息框MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 连接按钮的点击信号到槽函数 onButtonClickedconnect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::onButtonClicked);
}MainWindow::~MainWindow()
{delete ui;
}// 槽函数的实现,当按钮被点击时会调用这个函数
void MainWindow::onButtonClicked()
{// 显示一个消息框QMessageBox::information(this, "消息", "按钮被点击了!");
}

QMessageBox::information(this, “消息”, “按钮被点击了!”); 是 Qt 框架中用来显示消息框的函数调用
标题:消息
内容:按钮被点击了!
按钮:一个“OK”按钮,用户可以点击以关闭消息框
在这里插入图片描述

5.4 编译并运行项目

点击左下角的 绿色三角形(运行按钮),或按 Ctrl+R
在这里插入图片描述

Qt Creator 会编译项目并启动程序,出现一个窗口,带有一个按钮,点击按钮时,会弹出一个消息框显示 “Button Clicked!”
在这里插入图片描述

6. 信号和槽(Signals and Slots)

信号是 Qt 对象(通常是 QWidget 的子类)用来通知其他对象某些事件已经发生的机制
例如,当按钮被点击时,就会发出 clicked() 信号
槽函数用于接收信号并对信号做出响应,
槽是一个普通的 C++ 函数,可以是任何成员函数、普通函数、甚至是 lambda 表达式,并且可以是公有、保护或私有的函数

使用 connect() 函数将信号和槽连接起来

connect(信号发出者, 信号, 接收者, 槽函数);
connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::onButtonClicked);

将按钮的 clicked() 信号与 onButtonClicked() 槽函数连接,当按钮被点击时,onButtonClicked() 就会被调用

相关文章:

C++入门(06)安装QT并快速测试体验一个简单的C++GUI项目

文章目录 1. 清华镜像源下载2. 安装3. 开始菜单上的 QT 工具4. 打开 Qt Creator5. 简单的 GUI C 项目5.1 打开 Qt Creator 并创建新项目5.2 设计界面5.3 添加按钮的点击事件5.4 编译并运行项目 6. 信号和槽&#xff08;Signals and Slots&#xff09; 这里用到了C类与对象的很多…...

一篇文章告诉你小程序为什么最近这么火?

微信小程序之所以最近这么火&#xff0c;主要得益于其低成本获取高流量、线上线下流量互换、社交裂变引爆流量以及封闭商业生态闭环等优势。下面将详细探讨小程序火爆的多个原因&#xff1a; 一篇文章告诉你小程序为什么这么火爆&#xff1f; 低成本获取高流量 无需安装注册&…...

Qt-常用控件(3)-多元素控件、容器类控件和布局管理器

1. 多元素控件 Qt 中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView xxWidget 和 xxView 之间的区别&#xff0c;以 QTableWidget 和 QTableView 为例. QTableView 是基于 MVC 设计的控件.QTableView 自身不持有数据,使用 QTableView 的…...

【系统设计】主动查询与主动推送:如何选择合适的数据传输策略

基本描述总结 主动查询机制&#xff1a;系统A主动向系统B请求数据&#xff0c;采用严格的权限控制和身份认证&#xff0c;防止未授权的数据访问。数据在传输过程中使用TLS加密&#xff0c;并通过动态脱敏处理隐藏敏感信息。 推送机制&#xff1a;系统B在数据更新时主动向系统…...

mac 安装brew并配置国内源

​ 前置条件 - Xcode 命令行工具 一行代码安装Homebrew 添加到路径(PATH) - zsh shell为例 背景介绍 最近重装了我的MAC mini &#xff08;m1 芯片&#xff09;, 很多软件都需要重新安装&#xff0c;因为后续还需要安装一些软件&#xff0c;所以想着安装个包管理软件 什么…...

Temu官方宣导务必将所有的点位材料进行检测-RSL资质检测

关于饰品类产品合规问题宣导&#xff1a; 产品法规RSL要求 RSL测试是根据REACH法规及附录17的要求进行测试。REACH法规是欧洲一项重要的法规&#xff0c;其中包含许多对化学物质进行限制的规定和高度关注物质。 为了确保珠宝首饰的安全性&#xff0c;欧盟REACH法规规定&#…...

mysql高级sql

文章目录 一&#xff0c;查询1.按关键字排序1.1按关键字排序操作(1)按分数排序查询&#xff08;不加asc默认为升序&#xff09;(2)按分数降序查询&#xff08;DESC&#xff09;(3)使用where进行条件查询(4)使用ORDER BY语句对多个字段排序 1.2使用区间判断查询&#xff08;and/…...

Linux CentOS 7.9 安装mysql8

1、新建mysql文件夹 数据比较大&#xff0c;所以我在服务器另外挂了一个盘装mysql&#xff0c;和默认安装一个道理&#xff0c;换路径即可 cd ../ //创建文件夹 mkdir mysql //进入mysql文件夹 cd mysql 2、下载mysql8.0安装包并解压、重命名 //下载安装包 wget https://dev…...

替代 Django 默认 User 模型并使用 `django-mysql` 添加数据库备注20240904

替代 Django 默认 User 模型并使用 django-mysql 添加数据库备注 前言 在 Django 项目开发中&#xff0c;默认的 User 模型虽然能够满足许多基础需求&#xff0c;但在实际项目中我们常常需要对用户模型进行定制化。通过覆盖默认的 User 模型&#xff0c;我们可以根据具体的业…...

三维激光扫描点云配准外业棋盘的布设与棋盘坐标测量

文章目录 一、棋盘标定板准备二、棋盘标定板布设三、棋盘标定板坐标测量一、棋盘标定板准备 三维激光扫描棋盘是用来校准和校正激光扫描仪的重要工具,主要用于提高扫描精度。棋盘标定板通常具有以下特点: 高对比度图案:通常是黑白相间的棋盘格,便于识别。已知尺寸:每个格…...

【Python知识宝库】文件操作:读写文件的最佳实践

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、文件读取1. 使用open函数2. 逐行读取3. 使用readlines和readline 二、文件写入1. 写入文本2. 追加内容3. 写入…...

Chapter 13 普通组件的注册使用

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 前言一、组件创建二、局部注册三、全局注册 前言 在 Vue.js 中&#xff0c;组件是构建应用程序的基本单元。本章详细讲解了注册和使用 Vue 的普通组件的两种方式&#xff1a;…...

u盘显示需要格式化才能用预警下的数据拯救恢复指南

U盘困境&#xff1a;需要格式化的紧急应对 在数字信息爆炸的时代&#xff0c;U盘作为便携的数据存储介质&#xff0c;承载着我们工作、学习乃至生活中的大量重要资料。然而&#xff0c;当U盘突然弹出“需要格式化才能用”的提示时&#xff0c;这份便捷瞬间转化为焦虑与不安。这…...

还不懂BIO,NIO,AIO吗

BIO&#xff08;Blocking I/O&#xff09;、NIO&#xff08;Non-blocking I/O&#xff09;和 AIO&#xff08;Asynchronous I/O&#xff09;是 Java 中三种不同的 I/O 模型&#xff0c;主要用于处理输入 / 输出操作。 一、BIO&#xff08;Blocking I/O&#xff09; 定义与工作原…...

物联网——DMA+AD多通道

DMA简介 存储器映像 某些数据在运行时不会发生变化&#xff0c;则设置为常量&#xff0c;存在Flash存储器中&#xff0c;节省运行内存的空间 DMA结构图 DMA访问权限高于cpu 结构要素 软件触发源&#xff1a;存储器到存储器传输完成后&#xff0c;计数器清零 硬件触发源&…...

Vue 中 watch 和 watchEffect 的区别

watch 和 watcheffect 都是 vue 中用于监视响应式数据的 api&#xff0c;它们的区别在于&#xff1a;watch 用于监视特定响应式属性并执行回调函数。watcheffect 用于更通用的响应式数据监视&#xff0c;但回调函数中不能更新响应式数据。Vue 中 watch 和 watchEffect 的区别 …...

pip install pyaudio sounddevice error: externally-managed-environment

shgbitaishgbitai-C9X299-PGF:~/pythonworkspace/ai-accompany$ pip install pyaudio sounddevice error: externally-managed-environment This environment is externally managed ╰─> To install Python packages system-wide, try apt installpython3-xyz, where xyz …...

HTML 转 PDF API 接口

HTML 转 PDF API 接口 网络工具 / 文件处理 支持网页转 PDF 高效生成 PDF / 提供永久链接。 1. 产品功能 超高性能转换效率&#xff1b;支持将传递的 HTML 转换为 PDF&#xff0c;支持转换 HTML 中的 CSS 格式&#xff1b;支持传递网站 URL&#xff0c;直接转换页面成对应的 …...

http://localhost:15672/ 无法访问

注意erlang版本和rabbitmq的版本要保持兼容 rabbitmq和erlang对应关系如下&#xff1a;https://www.rabbitmq.com/which-erlang.html 目前我选择的erlang版本是&#xff1a;otp_win64_24.3.3&#xff0c;rabbit版本是&#xff1a;rabbitmq-server-3.10.18.exe 如果两者之间的版…...

6.3图的遍历

图的遍历是指从某点出发,按照某种搜索方式沿着边访问图中所有节点 图的遍历算法主要有两种:广度优先,深度优先 都需要辅助数组visited[]来记录节点是否被访问过 6.3.1广度优先搜索 like层次遍历,需要辅助队列 代码实现 #include<stdio.h> #define maxnum 15 bool vi…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...