【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|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
