【Qt】无IDE的Gui程序快速开始
Qt安装
在 Windows 上安装 Qt 的步骤如下:
下载 Qt 安装程序
- 访问 Qt 的官方网站:Qt Downloads。
- 点击“Download”按钮,下载 Qt Online Installer(在线安装程序)。
运行安装程序
- 双击下载的
QtInstaller.exe
文件,启动安装程序。
登录或注册 Qt 账户
- 如果你已经有 Qt 账户,可以直接登录;如果没有,需要注册一个新账户。注册是免费的,允许你下载开源版本和评估版。
选择安装方式
- 在安装程序中,选择合适的安装方式,这里选择开源版本:
- 开源版本:适合个人或小型项目。
- 商业版本:需要付费,适合商业项目。
选择组件
-
安装程序将显示可用的 Qt 版本和组件。在这里,你可以选择:
- Qt 版本:选择你想安装的 Qt 版本(例如 Qt 5.x 或 Qt 6.x),这里选择Qt 6.7。
- 编译器:选择适合你的系统的编译器(如 MSVC 或 MinGW),这里选择MinGW。
- 工具:包括 Qt Creator、Qt 文档等。
确保勾选“Qt Creator”,这是 Qt 的集成开发环境(IDE)。
设置安装路径
- 选择你希望安装 Qt 的目录,默认路径一般是
C:\Qt
。你可以更改到你喜欢的路径。
安装
- 点击“Install”开始安装。这可能需要一些时间,具体取决于你选择的组件和你的网络速度。
配置环境变量
配置 Qt 和相关工具的环境变量是确保开发环境正常运行的重要步骤,具体步骤如下:
- 打开系统属性:
- 右键点击“此电脑”,选择“属性”,需要进入系统设置以修改环境变量。
- 访问高级系统设置:
- 点击“高级系统设置” ,环境变量的设置位于高级选项中。
- 打开环境变量设置:
- 点击“环境变量”按钮,这里可以编辑或添加系统变量。
- 编辑系统变量:
- 在“系统变量”中选择“Path”,点击“编辑”,Path 变量存储了可执行文件的搜索路径,修改它可以让命令行访问相应工具。
- 添加路径:
- 添加以下目录路径:
- Qt 的
bin
目录,例如C:\Qt\6.7.2\mingw_64\bin
,确保可以直接调用 Qt 的动态库。 - CMake 的
bin
目录,例如C:\Qt\Tools\CMake_64\bin
,确保可以使用 CMake 构建项目。 - Mingw 的
bin
目录,例如C:\Qt\Tools\mingw1120_64\bin
,确保编译器可用,以进行项目的编译。
- Qt 的
- 添加以下目录路径:
- 保存并关闭:
- 保存更改并关闭所有窗口。
以下是整理后的文章结构,确保两种实现的效果相同,代码简洁,解释充分,包含详细的中文注释。
程序编写
创建项目结构
假设你的项目结构如下:
/MyQtProject
├── CMakeLists.txt
├── main.cpp
└── main.qml (仅用于 Qt Quick 项目)
Qt Widgets 实现
Qt Widgets 是 Qt 框架最早引入的 GUI 构建方式,面向传统桌面应用,基于 C++ 的类库。它提供了大量现成的控件(如按钮、文本框、菜单等),开发者通过面向对象的方式组合这些控件,构建用户界面。
CMakeLists.txt
cmake_minimum_required(VERSION 3.14) # 设置 CMake 最小版本project(WidgetsDemo LANGUAGES CXX) # 定义项目名称和使用的语言find_package(Qt6 COMPONENTS Widgets REQUIRED) # 查找 Qt Widgets 模块add_executable(WidgetsDemo main.cpp) # 添加可执行文件target_link_libraries(WidgetsDemo PRIVATE Qt6::Widgets) # 链接 Qt Widgets 库
main.cpp
#include <QApplication> // 引入 QApplication 类
#include <QPushButton> // 引入 QPushButton 类
#include <QVBoxLayout> // 引入垂直布局类
#include <QLabel> // 引入 QLabel 类
#include <QWidget> // 引入 QWidget 类int main(int argc, char *argv[]) {QApplication app(argc, argv); // 创建应用实例QWidget window; // 创建主窗口window.setFixedSize(400, 300); // 设置窗口大小QVBoxLayout layout; // 创建垂直布局QLabel label("Hello, World!"); // 创建标签QPushButton button("点击我"); // 创建按钮layout.addWidget(&label); // 添加标签到布局layout.addWidget(&button); // 添加按钮到布局// 连接按钮点击信号与标签文本更新QObject::connect(&button, &QPushButton::clicked, [&]() {label.setText("按钮被点击了!"); // 更新文本});window.setLayout(&layout); // 设置窗口的布局window.show(); // 显示主窗口return app.exec(); // 启动事件循环
}
Qt Quick + QML 实现
Qt Quick 是用于开发现代化、动态用户界面的模块,适用于需要动画效果和响应式布局的应用。QML(Qt Modeling Language)是 Qt Quick 的核心语言,专门用于设计用户界面,具有声明式特点。
CMakeLists.txt
cmake_minimum_required(VERSION 3.14) # 设置 CMake 最小版本project(QmlDemo LANGUAGES CXX) # 定义项目名称和使用的语言find_package(Qt6 COMPONENTS Quick REQUIRED) # 查找 Qt Quick 模块add_executable(QmlDemo main.cpp) # 添加可执行文件target_link_libraries(QmlDemo PRIVATE Qt6::Quick) # 链接 Qt Quick 库
main.cpp
#include <QGuiApplication> // 引入 QGuiApplication 类
#include <QQmlApplicationEngine> // 引入 QQmlApplicationEngine 类int main(int argc, char *argv[]) {QGuiApplication app(argc, argv); // 创建应用实例QQmlApplicationEngine engine; // 创建 QML 引擎engine.load(QUrl(QStringLiteral("file:///path/to/your/main.qml"))); // 加载 QML 文件return app.exec(); // 启动事件循环
}
main.qml
import QtQuick 2.15 // 导入 Qt Quick 模块
import QtQuick.Controls 2.15 // 导入 Qt Quick 控件模块ApplicationWindow {visible: true // 窗口可见width: 400 // 窗口宽度height: 300 // 窗口高度title: "Qt Quick Demo" // 窗口标题Column {anchors.centerIn: parent // 垂直布局,居中显示Text {id: label // 定义文本组件text: "Hello, World!" // 初始文本}Button {text: "点击我" // 按钮文本onClicked: {label.text = "按钮被点击了!" // 更新文本}}}
}
配置和构建项目
在命令行中执行以下步骤:
创建构建目录
在项目目录下创建一个 build
目录:
mkdir build
cd build
配置项目
使用 CMake 配置项目:
cmake ..
如果一切正常,你应该会看到 CMake 输出一些配置信息,确认 Qt6
被正确找到。
构建项目
执行以下命令构建项目:
cmake --build .
运行项目
构建成功后,可以在 build
目录中找到生成的可执行文件。运行它:
./xxxxDemo
相关文章:
【Qt】无IDE的Gui程序快速开始
Qt安装 在 Windows 上安装 Qt 的步骤如下: 下载 Qt 安装程序 访问 Qt 的官方网站:Qt Downloads。点击“Download”按钮,下载 Qt Online Installer(在线安装程序)。 运行安装程序 双击下载的 QtInstaller.exe 文件…...

Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...
linux常用命令汇编(持续更新)
一、用户提示符 # root账号提示符 $ 普通用户提示符 二、关闭计算机 shutdown(安全有序地关闭计算机) 语法:shutdown [options] [time] [message] shutdown -h now #立即关机(--halt/终止) shutdown -r now #重…...

AI面试指南:AI工具总结评测,助力求职季
AI面试指南:AI工具总结评测,助力求职季 摘要: 在竞争激烈的AI领域秋招季,准备充分并借助高效工具是提升面试通过率的关键。本文主要介绍一些针对秋招的AI面试工具和学习资源,分为简历优化、面试助手、手撕代码练习三个…...
大二考核题解
大二考核题解 题号题目考察知识点A有意思的监考二分答案B海绵宝宝的数独DFSC走楼梯递推D碱基配对kmpE好简单的题啊,写它!最短路 写在前面: 整体难度不大,代码能力需要一些,正常来说至少要会3题以上 A 有意思的监考 …...
深入解析:Kubernetes 如何使用 etcd 作为配置中心和注册中心
在 Kubernetes 中,etcd 是核心的分布式存储组件,负责存储和管理集群的所有配置信息、状态数据以及服务注册信息。etcd 的高可用性和强一致性使得它成为 Kubernetes 的 “source of truth”,确保集群能够动态、高效地管理资源,并保…...

MQ高级:RabbitMQ小细节
在之前的学习中,我们只介绍了消息的发送,但是没有考虑到异常的情况,今天我们就介绍一些异常情况,和细节的部分。 目录 生产者可靠性 生产者重连 生产者确认 MQ可靠性 持久化 Lazy Queue 消费者可靠性 消费者确认机制 失…...

期权卖方怎么选择权利金高的品种,期货VIX高低对行情有什么影响
VIX指数——全称为芝加哥期权交易所市场波动率指数,俗称恐慌指数。 是衡量波动性的重要指标。VIX指数上升,预期未来市场波动性会增加。VIX指数下降,预期未来市场波动性会降低。 期货VIX指数最新价格排序 期权卖方尽量选择期货VIX指数在25以…...
内存对齐的原理和使用
1. 什么是内存对齐? 内存对齐是指将数据存储在内存中时,按照数据类型的大小,将数据放在特定的内存边界上。例如,4 字节的 int 通常放在能够被 4 整除的地址上,8 字节的 double 则放在能被 8 整除的地址上。 2. 为什么…...

搭建企业级私有仓库harbor
华子目录 harbor简介实验环境准备下载软件包安装docker-cehosts解析 实验步骤配置https加密传输解压进入解压目录,修改文件配置启动harbor 测试客户端配置harbor本地加速器注意 通过docker compose管理harbor harbor简介 harbor是由wmware公司开源的企业级docker r…...
互联网前后端分离的开发场景,一般会员和数据权限的判断是放在前端还是后端?
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...

李宏毅机器学习2022-HW8-Anomaly Detection
文章目录 TaskBaselineReportQuestion2 Code Link Task 异常检测Anomaly Detection 将data经过Encoder,在经过Decoder,根据输入和输出的差距来判断异常图像。training data是100000张人脸照片,testing data有大约10000张跟training data相同…...

用户体验分享 | YashanDB V23.2.3安装部署
近期崖山新版体验过程中,总能看到用户提问:openssl版本问题、monit命令找不到问题、yashan用户权限问题、数据库重装问题 今日整理了多位用户的安装经验,希望能够帮助到大家~ 1.Lucifer三思而后行 :YashanDB 个人版数据库安装部…...
【漏洞复现】泛微OA E-Office /E-mobile/App/init.php 任意文件上传漏洞
免责声明: 本文旨在提供有关特定漏洞的信息,以帮助用户了解潜在风险。发布此信息旨在促进网络安全意识和技术进步,并非出于恶意。读者应理解,利用本文提到的漏洞或进行相关测试可能违反法律或服务协议。未经授权访问系统、网络或应用程序可能导致法律责任或严重后果…...

SpringCloudEureka实战:搭建EurekaServer
1、依赖引入 <dependencies><!-- 注册中心 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency> </dependencies> <de…...

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr
DataLight(V1.4.5) 版本更新,新增 Ranger、Solr DataLight 迎来了重大的版本更新,现已发布 V1.4.5 版本。本次更新对平台进行了较多的功能拓展和优化,新增了对 Ranger 和 Solr 服务组件的支持,同时对多项已…...

深度解析:Python蓝桥杯青少组精英赛道与高端题型概览
目录 一、蓝桥杯青少组简介二、赛项组别与年龄范围三、比赛内容与题型1. 基础知识范围2. 题型设置2.1 选择题2.2 编程题 3. 考试时长 四、奖项设置与激励措施五、总结 一、蓝桥杯青少组简介 蓝桥杯全国软件和信息技术专业人才大赛(简称“蓝桥杯”)是由工…...

如何使用SCCMSecrets识别SCCM策略中潜在的安全问题
关于SCCMSecrets SCCMSecrets是一款针对SCCM策略的安全扫描与检测工具,该工具旨在提供一种有关 SCCM 策略的全面安全检测方法。 该工具可以从各种权限级别执行,并将尝试发现与策略分发相关的潜在错误配置。除了分发点上托管的包脚本外,它还将…...
Qt 信号重载问题--使用lambda表达式--解决方法
在connect()中,使用lambda表达式时遇到信号重载,无法识别使用哪个参数时,可通过以下方法处理: 1. 使用QOverload: Qt5.7才有 connect(comboBox,QOverload<int>::of(&QComboBox::currentIndexChanged), [](int index)…...
并行编程实战——TBB框架的应用之一Supra的基础
一、TBB的应用 在前面分析了TBB框架的各种基本知识和相关的基础应用。这些基础的应用很容易通过学习文档或相关的代码来较为轻松的掌握。为了能够更好的理解TBB框架的优势,这里从一个开源的应用程序来分析一下TBB在其中的更高一层的抽象应用,以方便开发…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...