Win11 CLion Qt开发探索

文章目录

  • 一、Win11 CLion Qt需要的环境
  • 二、环境说明
  • 三、Win11 CLion Qt 开发步骤
  • 四、CLion Qt CMake脚本相关配置
    • 4.1 在CLion里如何使用资源文件.qrc
    • 4.2 Qt6 cmake如何添加ts翻译文件
  • 五、程序打包


本篇博客介绍在Win11上使用CLion来编写Qt QWidget项目。
视频讲解:https://www.bilibili.com/video/BV1cHDKYDE4D/?vd_source=dddbd48a76f0f870e223c6781ad043ab

一、Win11 CLion Qt需要的环境

(1) 安装VS2022, 勾选C++开发相关模块;

(2) 安装Qt6版本,尽量LTS版本,例如Qt6.5, Qt6.8, 本篇博客安装的是Qt6.5.3, 如果想安装Qt5.15.2也可以勾选上;关于VS Qt开发环境的安装可以看我这篇博客:
https://mingshiqiang.blog.csdn.net/article/details/108015209
按最新的VS2022 + Qt6.5.3,如果需要Qt5,也可以安装Qt5.15.2。

(3) 安装CLion, 下载链接:
https://www.jetbrains.com/clion/download/#section=windows

在这里插入图片描述

二、环境说明

  Qt6以上版本,官方推荐使用CMake构建,其实用qmake也没啥问题。CLion C++程序是用CMake构建,本篇博客介绍CLion Qt6 cmake构建方式。
  CLion安装后的默认C++编译器是MinGW,如果安装了VS,那么会有两个环境,建议在win11上使用VS C++环境。本篇博客介绍在Win11上使用CLion来编写Qt QWidget项目,由于Qt也分为MinGW和msvc,为了统一CLion和Qt的环境,在安装Qt时也选择msvc, 因为在windows上写C++客户端,难免需要和windows系统打交道,可能需要使用Windows C API, 因此在windows上使用msvc C/C++环境是比较好的选择。

三、Win11 CLion Qt 开发步骤

(1)先创建一个C++项目,点开设置,将vs开发环境移到最前面, 也就是把VS设置为CLion的默认C/C++编译环境。
在这里插入图片描述
(2)创建Qt Widget项目,选择Qt路径和版本
在这里插入图片描述
项目创建之后稍等CLion加载项目文件,然后运行项目。

在这里插入图片描述
默认是创建了一个按钮并显示。可以添加C++类或者Qt界面类,如下图添加Qt界面类:

在这里插入图片描述
写类名字,并添加到cmake脚本里,如下图:

在这里插入图片描述
新添加的Qt界面类会产生.h .cpp和.ui文件,ui文件可以双击直接打开,拖拽控件到界面上,然后保存,运行项目即可。
启动新建的MainWindow, 代码如下:

int main(int argc, char* argv[])
{
    QApplication a(argc, argv);
    // QPushButton button("Hello world!", nullptr);
    // button.resize(200, 100);
    // button.show();

    QTranslator ts;
    ts.load(":/untitled_zh_CN.qm");
    a.installTranslator(&ts);

    MainWindow w;
    w.show();

    return QApplication::exec();
}

四、CLion Qt CMake脚本相关配置

4.1 在CLion里如何使用资源文件.qrc

CLion没有QtCreator直接添加qrc文件这种方式,可以手动使用CLion新建qrc文件,例如取名为qrc.qrc, .qrc文件一般写法如下:

<RCC>
    <qresource prefix="/">
        <file>Resources/Images/home.png</file>
        <file>Resources/Images/trans.png</file>
        <file>Resources/Images/wordbook.png</file>
    </qresource>
</RCC>

然后再cmake脚本里添加qrc文件

add_executable(qt_demo01 main.cpp
        qrc.qrc
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui)

使用qrc里的图片给按钮设置背景图片,代码如下:

QString qss01 = R"(
    QPushButton {
        background-image: url(":/Resources/Images/home.png");
        background-repeat: no-repeat;
        background-position: center;
        border: none; /* 去掉按钮边框 */
        color: white; /* 如果需要,可以设置按钮文字颜色 */
        padding: 10px; /* 如果需要,可以设置按钮内边距 */
    }

    QPushButton:hover {
        background-image: url(":/Resources/Images/home.png"); /* 鼠标悬停时的背景图片 */
    }

    QPushButton:pressed {
        background-image: url(":/Resources/Images/home.png"); /* 按下按钮时的背景图片 */
    }
)";

ui->pushButton->setText("");
ui->pushButton->setStyleSheet(qss01);

4.2 Qt6 cmake如何添加ts翻译文件

CLion也没有类似QtCreator的新建添加ts文件的方法,可以手动创建ts文件,然后添加到cmake脚本里,ts文件的一般格式:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN"></TS>

注意这里的语言的中文zh_CN,如果是其它语言language的值不同,可以去QtCreator里创建然后抄过来。
在CLion cmake脚本里添加如下命令,把手动添加的ts文件加进来:

# 添加ts文件后新增的
find_package(Qt6 REQUIRED COMPONENTS LinguistTools)

。。。

# 添加ts文件
qt_add_translations(qt_demo01 TS_FILES untitled_zh_CN.ts)

去build目录执行如下命令更新ts文件:

cmake --build . --target update_translations

然后使用qt语言专家生成qm文件,将qm文件添加到qrc里,或者放在exe某个路径,进行加载,例如我放到qrc文件里。

<RCC>
    <qresource prefix="/">
        <file>Resources/Images/home.png</file>
        <file>Resources/Images/trans.png</file>
        <file>Resources/Images/wordbook.png</file>
        <file>untitled_zh_CN.qm</file>
    </qresource>
</RCC>

加载翻译后的qm文件

QTranslator ts;
ts.load(":/untitled_zh_CN.qm");
a.installTranslator(&ts);

五、程序打包

CLion编译程序后会生成exe, 然后使用windeployqt6程序提取依赖库,使用打包工具打包即可,例如Inno Setup、NSIS等等。

总的来说,使用在Wind11上使用CLion开发问题不大,和VS + qt vsaddin相比,CLion Qt的配置构建相对麻烦,因为很多Qt的模块都需要手动添加,例如上面的qrc、ts文件,不过解决这些问题后,CLion Qt开发也是一种很不错的方式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows Server2012 R2搭建NFS服务器

正文共&#xff1a;1024 字 23 图&#xff0c;预估阅读时间&#xff1a;1 分钟 在测试vCenter的集群操作时&#xff0c;出现了共享vSAN错误的问题&#xff0c;导致无法继续。我也只好先创建一个共享NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;存储…

信息安全工程师(77)常见网络安全应急事件场景与处理流程

前言 网络安全应急事件场景多样&#xff0c;处理流程也需根据具体情况灵活调整。以下将详述几种常见的网络安全应急事件场景及其处理流程。 一、数据泄露事件 场景描述&#xff1a; 数据泄露是指敏感、受保护或机密数据被未经授权的个人复制、传输、查看、窃取或使用。这种事件…

win10下MMSegmentation自定义数据集

下载1.2.1版本: Releases open-mmlab/mmsegmentation GitHub 安装环境 本地torch环境为1.9.1 pip install -U openmim mim install mmengine mim install "mmcv>=2.0.0" 报mmcv版本不匹配的问题,形如:MMCV==X.X.X is used but incompatible. Please inst…

低代码解锁跨平台应用开发新境界

数字化转型中&#xff0c;企业面临应用开发挑战&#xff0c;低代码平台成为理想选择。ZohoCreator提供统一开发环境、拖拽设计、预置模板等&#xff0c;支持高效构建跨平台应用&#xff0c;确保数据安全与合规&#xff0c;助力企业数字化转型。 一、低代码平台是什么&#xff1…

yolov8涨点系列之C2f模块改进主分支

文章目录 C2F 模块介绍定义与基本原理应用场景 C2f模块修改步骤(1) C2f_up模块编辑(2)在__init_.pyblock.py中声明&#xff08;3&#xff09;在task.py中声明yolov8引入C2f_up模块yolov8.yamlyolov8.yaml引入C2f_up模块 C2f改进对YOLOv8检测具有多方面的好处 C2F 模块介绍 定义…

数据结构算法篇--递归(c语言版)

目录 1.递归 1.1求阶乘&#xff1a; 1.2.斐波那契数 1.3. 求幂 1.递归 在C语言中&#xff0c;递归是一种函数调用自身的方法&#xff0c;用来解决一些具有重复性质的问题。例如&#xff0c;计算阶乘、斐波那契数列等问题都可以通过递归实现。 递归在书写的时候&#xff0…

[大模型]视频生成-Sora简析

参考资料&#xff1a; Sora技术报告https://openai.com/index/video-generation-models-as-world-simulators/4分钟详细揭密&#xff01;Sora视频生成模型原理https://www.bilibili.com/video/BV1AW421K7Ut 一、概述 相较于Gen-2、Stable Diffusion、Pika等生成模型的前辈&am…

【数据仓库】Hive 拉链表实践

背景 拉链表是一种数据模型&#xff0c;主要是针对数据仓库设计中表存储数据的方式而定义的&#xff1b;顾名思义&#xff0c;所谓拉链表&#xff0c;就是记录历史。记录一个事务从开始一直到当前状态的所有变化的信息。 拉链表可以避免按每一天存储所有记录造成的海量存储问题…

UnityAssetsBundle字体优化解决方案

Unity开发某个项目&#xff0c;打包后的apk包体已经高达1.25G了&#xff0c;这是非常离谱的。为了不影响用户体验&#xff0c;需要将apk包体缩小。因为项目本身不包含很多模型以及其他大型资源&#xff0c;排除法将AB包删除&#xff0c;发现app本身就100多M。 由此可以锁定是AB…

高通Quick板上安装编译Ros1 noetic,LeGO_LOAM,FAR_Planner和rslidar_sdk

环境要求&#xff1a; 这里quick板上安装的是Ubuntu20.04版本 Ros Noeti安装&#xff1a; 1.设置软件源&#xff1a; 官方提供的软件源&#xff1a; sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.…

Qt多边形填充/不填充绘制

1 填充多边形绘制形式 void GraphicsPolygonItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {Q_UNUSED(option);Q_UNUSED(widget);//painter->setPen(pen()); // 设置默认画笔//painter->setBrush(brush()); // 设置默…

零基础学习Spring AI Java AI使用向量数据库postgresql 检索增强生成 RAG

零基础学习Spring AI Java AI使用向量数据库postgresql 检索增强生成 RAG 向量数据库是一种特殊类型的数据库&#xff0c;在人工智能应用中发挥着至关重要的作用。 在向量数据库中&#xff0c;查询与传统的关系数据库不同。它们不是进行精确匹配&#xff0c;而是执行相似性搜…

如何在 uniapp 中实现图形验证码

全篇大概2000 字&#xff08;含代码&#xff09;&#xff0c;建议阅读时间10分钟。 什么是图形验证码&#xff1f; 图形验证码&#xff08;也称为图片验证码或验证码图像&#xff09;通常用于防止机器人自动提交表单&#xff0c;确保用户是人工操作。 一、需求 我们希望在一个…

mysql error:1449权限问题 及 用户授权

一、权限问题 Got error: 1449: The user specified as a definer (skip-grants userskip-grants host) does not exist when using LOCK TABLES 在迁移数据库时&#xff0c;定义的definer&#xff0c;在两个数据库之间不同步时&#xff0c;要将不存在的definer改成数据库中已…

uniapp+vue加油服务系统 微信小程序

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 基于微信小程序的加油服务系统设计为微信小程序和后台管理两个服务端&#xff0c;并对此设计相应的功能模块如下&#x…

【MFC编程(一)】MFC概述

文章目录 MFC概述MFC组成MFC对比Windows APIMFC类库基类CObject命令发送类CCmdTarget应用程序结构类应用程序线程支持类CWinThread/CWinApp文档类CDocument文档模板类CDocTemplate 窗口类窗口基类CWnd边框窗口类CFrameWnd视图类CView MFC概述 MFC&#xff08;Microsoft Founda…

如何解决传统能源企业后备人才不足、人才规划缺失问题

如何解决传统能源企业后备人才不足、人才规划缺失问题 很多传统能源企业都面临着老员工逐渐退休&#xff0c;新员工还没有培养起来的问题&#xff0c;缺乏提前对人力资源规划的意识&#xff0c;导致当企业要开展新业务时或者老员工离职的时候&#xff0c;缺乏合适的人选。特别…

服装品牌零售业态融合中的创新发展:以开源 AI 智能名片 S2B2C 商城小程序为视角

摘要&#xff1a;本文以服装品牌零售业态融合为背景&#xff0c;探讨信息流优化和资金流创新的重要作用&#xff0c;并结合开源 AI 智能名片 S2B2C 商城小程序&#xff0c;分析其如何进一步推动服装品牌在零售领域的发展&#xff0c;提高运营效率和用户体验&#xff0c;实现商业…

C#编程:VSTO在Excel工作表中输出List数据

标题 C#编程&#xff1a;VSTO在Excel工作表中输出List数据 正文 一、问题&#xff1a; 我想把C#中的List<T>输出到Excel工作表中 二、思路方法&#xff1a; &#xff08;1&#xff09;用程序创建一个List<T> &#xff08;2&#xff09;输出到当前工作表 三、代码&a…

【算法】递归+深搜:106.从中序与后序遍历序列构造二叉树(medium)

目录 1、题目链接 相似题目&#xff1a; 2、题目 3、解法 函数头-----找出重复子问题 函数体---解决子问题 4、代码 1、题目链接 106.从中序与后序遍历序列构造二叉树&#xff08;LeetCode&#xff09; 相似题目&#xff1a; 105.从前序与中序遍历序列构造二叉树 889.根…