【Qt】无IDE的Gui程序快速开始

news2024/10/1 12:16:46

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,确保编译器可用,以进行项目的编译。
  • 保存并关闭
    • 保存更改并关闭所有窗口。

以下是整理后的文章结构,确保两种实现的效果相同,代码简洁,解释充分,包含详细的中文注释。

程序编写

创建项目结构

假设你的项目结构如下:

/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

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

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

相关文章

uniapp学习(003-1 vue3学习 Part.1)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第11p-第p14的内容 文章目录 vue3使用介绍插值表达式例子时间戳随机数输出函数的值 ref响应式数据变量v-bind 绑…

PCL CropBox 过滤给定立方体内的点云数据

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 点云裁剪 2.1.2 可视化原始点云和裁剪后的点云 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长…

Python办公自动化案例:批量修改Word文件中的段落格式

案例:Python实现批量修改Word文件中的段落格式。 在处理大量Word文档时,经常需要批量修改这些文档的格式,比如统一段落格式,以提升文档的一致性和专业性。使用Python来实现这一任务可以极大地提高工作效率,特别是当涉及到数百或数千个文档时。Python通过第三方库如python…

【C#】CacheManager:高效的 .NET 缓存管理库

在现代应用开发中&#xff0c;缓存是提升性能和降低数据库负载的重要技术手段。无论是 Web 应用、桌面应用还是移动应用&#xff0c;缓存都能够帮助减少重复的数据查询和处理&#xff0c;从而提高系统的响应速度。然而&#xff0c;管理缓存并不简单&#xff0c;尤其是当你需要处…

《RabbitMQ篇》Centos7安装RabbitMQ

安装RabbitMQ 安装包网盘下载地址 链接&#xff1a;https://pan.baidu.com/s/1bG_nP0iCdAejkctFp1QztQ?pwd4mlw 先上传安装包到服务器&#xff08;erlang-23.3.4.11-1.el7.x86_64.rpm和rabbitmq-server-3.9.16-1.el7.noarch.rpm&#xff09;然后使用指令安装 # 安装 erlang r…

掌握 JVM 垃圾收集线程:简化 VM 选项

垃圾收集阶段对于任何 Java 应用程序都至关重要。主要目标是保持高吞吐量和低延迟之间的平衡。通过配置垃圾收集器&#xff0c;我们可以提高性能&#xff0c;或者至少推动应用程序朝着特定的方向发展。 垃圾收集周期越短越好。因此&#xff0c;分配给垃圾收集器的资源越多&…

昇思MindSpore进阶教程--下沉模式

大家好&#xff0c;我是刘明&#xff0c;明志科技创始人&#xff0c;华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享&#xff0c;如果你也喜欢我的文章&#xff0c;就点个关注吧 正文开始 昇腾芯片集成了AICORE和AICPU等…

C#自定义工具类-数组工具类

目录 数组工具类基本操作 1.排序&#xff1a;升序&#xff0c;降序 2.查找 1&#xff09;查找最值&#xff1a;最大值&#xff0c;最小值 2&#xff09;查找满足条件的单个对象 3&#xff09;查找满足条件的所有对象 4&#xff09;选取数组中所有对象的某一字段 完整代…

河南做网站与SEO:如何提升搜索引擎排名

河南做网站与SEO&#xff1a;如何提升搜索引擎排名 在当今数字化时代&#xff0c;越来越多的企业意识到互联网的重要性&#xff0c;特别是在河南这样一个快速发展的地区&#xff0c;建立一个优秀的网站已经成为企业发展的必要条件。而在建立网站的同时&#xff0c;SEO&#xff…

--- java数据结构 map set ---

java中map 和 set的底层实现是通过搜索树和哈希函桶来实现 搜索树 二叉搜索树有叫二叉排序树 他具有以下的特点 若存在左节点&#xff0c;那么他左节点的值一定小于根节点 若存在右节点&#xff0c;那么他右节点的值一定大于根节点 它的左右子树也是搜索树 对他进行中序…

leetcode热题100.最长公共子序列

题目 1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原…

SOMEIP_ETS_143: SD_Request_non_existing_ServiceID

测试目的&#xff1a; 验证DUT能够拒绝一个请求不存在的服务ID&#xff08;ServiceID&#xff09;的SubscribeEventgroup消息&#xff0c;并以SubscribeEventgroupNAck作为响应。 描述 本测试用例旨在确保DUT遵循SOME/IP协议&#xff0c;当接收到一个请求不存在服务ID的Subs…

RS485串口通信:【图文详讲】

RS485&#xff0c;RS的意义为Recommended Standard的缩写&#xff0c;也就是推荐标准&#xff0c;是一种常用的半双工-异步-串行通信总线。半双工的意思就是两者通信时&#xff0c;同一时刻&#xff0c;只能由其中一方发送&#xff0c;另一方只能接收&#xff0c;不可以同时收发…

vue3 antdv3/4 Modal显示一个提示,内容换行显示。

1、官网地址&#xff1a; Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.js 2、显示个信息&#xff1a; Modal.info({title: This is a notification message,content: h(div, {}, [h(p, some messages...some messages...),h(p, some …

基于解压缩模块的JPEG同步重压缩检测论文学习

一、论文基本信息&#xff1a; 论文题目&#xff1a;基于解压缩模块的JPEG同步重压缩检测 作者&#xff1a;王金伟1 &#xff0c;胡冰涛1 &#xff0c;张家伟1 &#xff0c;马 宾2 &#xff0c;罗向阳3 &#xff08;1.南京信息工程大学计算机学院、网络空间安全学院&#xf…

Linux-L11-查看本机ip地址

linux查看ip地址 查看自己的IP地址使用 ip 命令&#xff1a;使用 ifconfig 命令使用 hostname 命令&#xff1a;使用 nmcli 命令 查看某个特定接口的IP查看公网IP地址 在Linux系统中&#xff0c;查看自己的IP地址可以通过多种方式实现&#xff0c;这里提供几种常用的方法&#…

Stable Diffusion绘画 | LCM模型:实现秒出图

在过往&#xff0c;不管使用 SD 还是 MJ&#xff0c;生成一张图片起码要等上10秒。 而现在&#xff0c;有了 LCM 技术的加持&#xff0c;已经能做到秒出图&#xff0c;甚至是实时出图。 LCM(潜空间一致性模型) 是由 清华大学信息科学技术研究院 研发的大模型&#xff0c;它最…

鸿蒙 如何退出 APP

terminateSelf() 停止Ability自身 在EntryAbility中这么使用 this.context.terminateSelf()在Pages页面中这么使用 import { common } from kit.AbilityKit (getContext(this) as common.UIAbilityContext)?.terminateSelf() 也可以直接封装&#xff1a; import common f…

【GreenHills】GHS的Run-Time检查功能

【更多软件使用问题请点击亿道电子官方网站】 一、文档背景 在编写代码时&#xff0c;内存检查的重要性不容忽视。内存是程序运行的核心资源之一&#xff0c;负责存储程序运行所需的数据。由于内存资源的有限性和操作的复杂性&#xff0c;内存错误常常会直接导致程序崩溃、性…

华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架的Swin Transformer

如果你对MindSpore感兴趣&#xff0c;可以关注昇思MindSpore社区 模型简介 模型背景 Swin Transfromer在2021年首次发表于论文《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》&#xff0c;目前已用于图像分割、分类等计算机视觉领域的各项任务…