首页 > 其他分享 >CLion搭建Qt开发环境,并解决目录重构问题(最新版)

CLion搭建Qt开发环境,并解决目录重构问题(最新版)

时间:2024-01-27 17:58:47浏览次数:40  
标签:文件 CMake Qt 版本 cpp 最新版 CLion

序言

Qt版本不断更新,QtCreator也不断更新。在Qt4和Qt5时代,我一直认为开发Qt最好的IDE就是自带的QtCreator,可是时至今日,到了Qt6时代,QtCreator已经都12.0.1版本了,不仅没变的更好用,反而变得更难用了。一方面可能是我被JetBrains全家桶和各种AI代码提示插件给惯坏了,另一方面也可能是开源版本的QtCreator没有被重视。好在CLion支持Qt开发,相关功能越来越完善,使用起来也越来越方便,同时借助CLion的语法提示和各种插件能大大提高开发效率。网上关于CLion搭建Qt开发环境的教程很多,但不少已经很旧了,而且还有一些坑,本教程采用目前最新版的CLion和Qt6演示最新的搭建流程,希望给大家提供参考。

版本说明

  • CLion版本:2023.3.3
  • CMake版本:3.27.8(CLion内置绑定版本)
  • Qt6版本:6.6.1(MSCV2019 64-bit)、6.6.1(MinGW 11.2.0 64-bit)
  • VS版本:2022
  • MinGW版本:11.2.0 64-bit

CLion为当前最新版本,Qt为当前最新LTS版本,VS为2020 Pro版本。Qt安装时在Qt6.6.1下方勾选MSCV2019 64-bit和MinGW 11.2.0 64-bit两个Qt SDK组件,在Developer and Designer Tools下方勾选安装Qt自带的MinGW 11.2.0 64-bit编译器。对于不想安装VS的同学,可以下载安装Microsoft C++ 生成工具,只包含MSVC,不包含VS软件。

VS版本流程

在Windows上,推荐使用MSVC构建Qt程序,虽然MinGW也可以,但笔者的开发经历告诉我MSVC更合适一些。

基本配置

1. 创建Qt项目
新建项目,选择Qt微件可执行文件,Qt版本选择6,C++版本选择17。
image
选择Qt CMake前缀路径为Qt对应SDk目录,不用选到bin目录,只要选择上级目录即可,这里选择的是MSVC版本的。
image
2. 设置CLion工具链
在设置->构建、执行、部署->工具链选项中创建Visual Studio工具链。
image
工具集路径设置为VS安装文件夹位置,2020 Pro版本为2020/Professional,其他版本可自行尝试,只要CLion检索到工具链版本信息就说明添加正确了。可以使用提升键将Visual Studio工具链提到第一位,成为CLion的默认工具链。
image
如果已经将Visual Studio工具链设置成默认工具链,那么Cmake默认工具链就是默认的Visual Studio工具链,如果默认是其他工具链,请换成Visual Studio工具链。构建类型可以在这里指定或者直接在Cmake文件中配置。生成器选择默认或者其他,个人推荐使用Ninja。
image
3. 运行程序
此时直接运行,程序已经可以跑起来了。示例代码为显示一个按钮:
image
4. 进行开发
创建UI文件,进行开发,类名设置为MainWindow,CLion为自动添加关联的cpp和hpp文件,并自动追加到CMake文件中。
image
image
image
双击UI文件打开QtDesigner进行UI编辑,添加按钮控件,保存关闭。
image
如果CLion提示找不到UI文件生成的头文件,执行一下构建即可。
image
image
手动创建qrc和rc文件,制作程序exe图标,和程序运行图标。qrc文件其实就是XML文件,节点qresource是一组资源,prefix是所有的资源前缀,file是其下的文件路径。
image
image
在CMake文件中添加这两资源文件。
image
进行简单的代码编写,主要是设置窗口图标,以及给按钮添加槽函数。
image
删除示例中的显示按钮,改为显示我们创建的MainWindow。
image
编译运行即可发现exe图标和程序运行图标已经正常显示。
image
image
image
但是点击按钮,可以发现CLion控制台没有显示qDebug()的输出消息,这里需要设置一下,打开运行->编辑配置,添加环境参数QT_ASSUME_STDERR_HAS_CONSOLE=1保存后重新运行即可发现功能已经正常。点击按钮,控制台输出PUSHED。
image
image
至此整个项目已经可以正常开发了,但是整个文件夹的文件和资源文件都混在一起,没有做好分类,我们需要重构一下文件目录。
image

重构目录

创建src目录,将cpp文件都放到src中(main.cpp一般不放);创建include目录,将所有头文件放入include中;创建form目录,将所有ui文件放入form中;创建resource目录,将所有资源文件放入resource中。
image
直接拖拽,CLion会直接帮你重构,CMake文件会直接改动。
image
编译运行,发现直接报错,提示AUTOUIC错误。
image
这是因为默认的AUTOUIC查找目录是mainwindow.cpp所在的目录,然后发现找不到所以报错,我们修改一下AUTOUIC查找路径为form文件夹所在目录。
image
运行即可解决问题。但是很多时候当项目较大时,文件很多,我们不可能一个一个手动添加。所以我们需要手动修改一下,按照正常的模板编写。
image
编译运行发现报错,提示链接错误。
image
如果在网上查询会告诉你如果在hpp文件中类的定义含有Q_OBJECT字段,Qt会创建相应的moc_xxx.cpp文件用于实现信号与通信机制,报错是由于没有正常生成对应的moc_xxx.cpp。我们打开CMake的编译输出文件夹可以发现,mocs_compilation.cpp的确啥也没有。
image
实际上mainwindow.hpp中的类是有Q_OBJECT,正常应该生成moc_mainwindow.cpp文件的,也就是说CMake在AUTOMOC中并没有检索到我们的hpp文件。但是不同于AUTOUIC可以指定搜索路径,CMake中AUTOMOC没有这个属性可以设置,那怎么解决?这里我们对比一开始没有重构目录时可以运行的情况,可以发现,如果hpp直接写在add_executable中就可以运行,但是使用include_directories就不行,也就是说include_directories和AUTOMOC并不关联。既然如此我们手动添加所有hpp文件。
image
编译运行,果然一切正常。打开CMake编译产生的文件夹,发现对应的moc_mainwindow.cpp也正常生成。
image

MinGW版本流程

MinGW版本的流程和VS版本基本一致,唯一不同的在3个地方,一是创建项目选择的Qt CMake前缀,二是CLion工具链配置,三是CLion CMake配置。

  1. 创建项目选择的Qt CMake前缀
    image
  2. CLion工具链配置
    image
  3. CLion CMake配置
    image
    其他所有流程和配置参考VS版本即可。

标签:文件,CMake,Qt,版本,cpp,最新版,CLion
From: https://www.cnblogs.com/hanlulu1998/p/17989683

相关文章

  • 【QT】选择和打开中文路径文件目录
    场景:Qt选择和打开目录,支持中文、空格等实现:#选择目录QStringstrDir="D:\\";QStringqslPath=QFileDialog::getExistingDirectory(this,"",strDir);ui->l_path->setText(qslPath);#打开目录QStringpath=ui->l_path->text();if(!path.isEmpty())QDe......
  • pyqt5基本安装过程(内含pip改变默认安装路径的方法)
    今天安装pyqt的时候发现pip总是会安装到一个我自己都找不到的地方,安装完和没安装一样,每次都只能靠pycharm中设置的安装库来救命。为了愉快的用命令行下载软件包(其实是因为qt需要安装的包太多),我改变了它的默认安装路径。如何改变pip默认安装路径先看一下python安装的默认位置以......
  • python--pyQt 基础框架代码 pyside6
    importsysfromPySide6importQtWidgets,QtCore,QtGuifromPySide6.QtCoreimportQt,QRectfromPySide6.QtGuiimportQColor,QEnterEventfromPySide6.QtWidgetsimportQApplication,QDialog,QMainWindow,QGraphicsDropShadowEffectimportyiqi_uiclassMain......
  • Qt中qreal的坑
    今天在写Qt的时候遇到了一个bug:同样一个方程在PC机上算的结果是11,但在arm-Linux设备上算出来的结果是12,我自己用计算器按出来的结果也是12。该段程序是这样的: maxnumbar=qreal((ItemHeight-radian*2)/height_rect);   其中 ItemHeight、radian、height_rect......
  • (QT) UDP监听断开
    UDP通讯只需要是用bind绑定对IP和Port的监听,断开监听可以使用函数abort() 做实验的时候用自定义类 classUDPClient:publicQObject{Q_OBJECTpublic:explicitUDPClient(QObject*parent=nullptr);publicslots:voidstartClient();voide......
  • Qt6
    第一章认识Qt新建一个GUI项目NewProject模板:Application(Qt)->QtWidgetsApplicationbuiltsystem:qmakespecifybasicinformation:Baseclass:QWidget语言:<无>kits:DesktopQt6.6.1MinGW64-bits项目的组成first_qt_project.pro:使用qmake构建系统时的项......
  • Qt编写手机端视频播放器/推流工具/Onvif工具
    一、视频播放器同时支持多种解码内核,包括qmedia内核(Qt4/Qt5/Qt6)、ffmpeg内核(ffmpeg2/ffmpeg3/ffmpeg4/ffmpeg5/ffmpeg6)、vlc内核(vlc2/vlc3)、mpv内核(mpv1/mp2)、mdk内核、海康sdk、easyplayer内核等。非常完善的多重基类设计,新增一种解码内核只需要实现极少的代码量,就可以应用整......
  • SpringBoot:Springboot整合Mqtt并处理问题
    搭建mqtt服务Docker搭建MQTT服务:https://www.cnblogs.com/nhdlb/p/17960641项目结构这是我的项目结构,主要有两个模块base-modules(业务模块)、base-utils(工具模块)组成,其中base-mqtt服务为工具模块,用于提供给其他业务模块引用依赖的。base-mqtt模块pom.xml这里我的Sprin......
  • U3D外包Unity最新版本的官方技术文档
    Unity5.0新特性——物理系统Unity5.0已升级到PhysX3.3SDK。在对4.x项目采取任何操作之前,请快速查看此博文。 关于更新的概述Unity5.0物理系统的预计工作速度是以前版本的2倍。以前熟悉的大多数组件仍然存在,它们的工作方式也和以前一样。当然,有些行为不可能......
  • Qt开发程序用QProcess调用curl命令上传文件并获取响应的文件
    1.需求做一个批量数字签名的工具,从一个文件夹内寻找所有的exe文件,然后复制到另外一个文件夹中,并且保存源文件的路径,将目标文件夹内的所有exe文件上传到公司的数字签名平台去做数字签名,并且返回接收后的文件;尝试了libcurl的post请求,发现总是返回参数错误; intHttpClient::Po......