Qt + Clion + cmake 环境配置

news2025/1/10 21:11:27

本文不涉及QML,因为我没用过

用C++写窗体,同时还有可视化UI界面,这不比控制台程序香吗?QAQ我大一写c++大作业的时候要是知道这个东西,我绝对满分啊!!!!

To:
新版的Clion 增加了对Qt的支持,的确是可以直接在Clion构建Qt项目,不过我的建议是先在Qt Creator里先新建项目(在这里构建的项目与在Clion里构建的项目,其CMakeLists.txt 有很大的不同,由Qt构建的CMake是最主要的部分,Clion的可以参考),可以运行了再尝试搬到clion去配置环境

ps:就算是使用Clion,设计ui的时候还是得回到 Qt Creator里的

目录

  • Qt安装内容
  • 环境配置
    • MinGW
    • MSVC
      • Debug调试
      • 编译问题
        • ...\Qt\5.15.2\msvc2015_64\lib\Qt5Widgetsd.lib : warning LNK4272:库计算机类型“x64”与目标计算机类型“x86”冲突
        • error LNK2019: 无法解析的外部符号 _RTC_CheckStackVars,函数 main 中引用了该符号
        • Error running 'Build': Cannot start process, the working directory '...\cmake-build-debug-msvc' does not exist
  • 特殊技巧
    • 添加动态库
    • 打开ui文件

Qt安装内容

Qt的安装过程百度上到处都是这里就不写了,主要想分享的是我对于Qt安装器里下载的内容的了解:

在这里插入图片描述
咳咳 字有点小 将就一下 (>人<;)
在这里插入图片描述
我的Qt安装目录

Qt
	5.15.2 # 版本包
		mingw81_64 
		msvc2015_64
		msvc2019_64
			bin
				assistant.exe # 查Qt API的
				designer.exe # ui设计器
				windeployqt.exe # 打包工具 
				libstdc++-6.dll # 超级重要的链接库  项目里缺了它就重定位不了 无法使用动态库
				opengl32sw.dll # opengl库
				...
		Src
	dist 
	Docs 
	Examples # 样例 这个可以多看看 超有用
	installerResources
	Licenses
	Tools # 工具包
		CMake_64 # CMake软件
		mingw810_64 # mingw 64位编译器
		Ninja # 忘了是啥了 反正挺重要的
		QtCreator # IDE 
		QtDesignStudio # 图标设计器 
		sdktool
	verdist
	components.xml
	InstallationLog.txt
	MaintenanceTool.exe # 安装器
	MaintenanceTool.dat
	MaintenanceTool.ini 
	network.xml

环境配置

Clion的配置主要还是靠Settings里的 Toolschains(工具) 和 CMake(具体运用到工程里的配置)
不需要添加到path(环境变量)里
Qt x.xx.x/msvc/bin 得添加到 path里,不然程序找不到Qt的动态库

MinGW

配置
Qt 5.15.2 + clion 2022.3.2 + mingw81_64(Qt里安装的那个)
在这里插入图片描述
在这里插入图片描述
虽然官网说CMAKE_PREFIX_PATH可以写在CMakeLists.txt,但我不建议你写在CmakeLists.txt里,毕竟和别人合作写项目时,别人可不一定有这个路径,而写在Settings里就没有这个问题

-G Ninja -DCMAKE_PREFIX_PATH=你的Qt下的mingw的路径

在这里插入图片描述

MSVC

配置
Qt 5.15.2 + clion 2022.3.2 + MSVC 2019
MSVC需要安装Visual Studio ,Qt只提供cmake及相关qt程序文件,在Visual Studio installer 里安装 MSVC xxxx c++生成工具+Windows SDK x

在这里插入图片描述
在这里插入图片描述

虽然官网说CMAKE_PREFIX_PATH可以写在CMakeLists.txt,但我不建议你写在CmakeLists.txt里,毕竟和别人合作写项目时,别人可不一定有这个路径,而写在Settings里就没有这个问题

-G Ninja -DCMAKE_PREFIX_PATH=你的路径

Debug调试

Clion无法查看QString等Qt特有的类的信息,需要额外的辅助

拷贝这个文件:qt5.natvis

放到项目的跟目录下,不需要其他设置,在你调试的时候Clion会自动寻找根目录下的这个文件

编译问题

…\Qt\5.15.2\msvc2015_64\lib\Qt5Widgetsd.lib : warning LNK4272:库计算机类型“x64”与目标计算机类型“x86”冲突

main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QString::~QString(void)" (__imp_??1QString@@QAE@XZ),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QApplication::QApplication(int &,char * *,int)" (__imp_??0QApplication@@QAE@AAHPAPADH@Z),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall QApplication::~QApplication(void)" (__imp_??1QApplication@@UAE@XZ),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: static int __cdecl QApplication::exec(void)" (__imp_?exec@QApplication@@SAHXZ),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall QWidget::show(void)" (__imp_?show@QWidget@@QAEXXZ),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall QWidget::resize(int,int)" (__imp_?resize@QWidget@@QAEXHH@Z),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QPushButton::QPushButton(class QString const &,class QWidget *)" (__imp_??0QPushButton@@QAE@ABVQString@@PAVQWidget@@@Z),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall QPushButton::~QPushButton(void)" (__imp_??1QPushButton@@UAE@XZ),函数 _main 中引用了该符号
D:\Tools\IDE\Qt\5.15.2\msvc2015_64\lib\Qt5Widgetsd.lib : warning LNK4272:库计算机类型“x64”与目标计算机类型“x86”冲突
D:\Tools\IDE\Qt\5.15.2\msvc2015_64\lib\Qt5Guid.lib : warning LNK4272:库计算机类型“x64”与目标计算机类型“x86”冲突
D:\Tools\IDE\Qt\5.15.2\msvc2015_64\lib\Qt5Cored.lib : warning LNK4272:库计算机类型“x64”与目标计算机类型“x86”冲突

注意了这不是通常可以忽略的警告,而是非常严重的报错,会导致找不到Qt5Widgetsd.lib链接库的

分析:Clion里的MSVC配置那里Architecture 属性和qt下载下来的msvc的不符,找个可以运行的qt项目,照抄qt creator的配置就行

解决方法: Settings-> Build, Execution, Deployment-> Toolchains里找到 MSVC 工具修改Architectureamd64

你可以打开Qt creator看一下对不对

error LNK2019: 无法解析的外部符号 _RTC_CheckStackVars,函数 main 中引用了该符号

main.cpp.obj : error LNK2019: 无法解析的外部符号 _RTC_CheckStackVars,函数 main 中引用了该符号
main.cpp.obj : error LNK2001: 无法解析的外部符号 _RTC_InitBase
main.cpp.obj : error LNK2001: 无法解析的外部符号 _RTC_Shutdown
main.cpp.obj : error LNK2001: 无法解析的外部符号 __CxxFrameHandler4
LINK : error LNK2001: 无法解析的外部符号 mainCRTStartup
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\kernel32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\user32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\gdi32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\winspool.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\shell32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\ole32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\oleaut32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\uuid.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\comdlg32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\advapi32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\lib\x86\MSVCRTD.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\lib\x86\msvcprtd.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突

分析:使用了clion自动从vs里检测到的cmake,改成qt自己的就行

解决方法: Settings-> Build, Execution, Deployment-> Toolchains里找到 MSVC 工具修改cmake...\Qt\Tools\CMake_64\bin\cmake.exe

Error running ‘Build’: Cannot start process, the working directory ‘…\cmake-build-debug-msvc’ does not exist

分析:使用了Ninja,虽然不知道为啥不能自动生成Debug输出文件

解决方法:File-> Roload CMake Project

特殊技巧

添加动态库

先看这个:关于为什么我们不需要为Qt的库设置路径就可以使用动态库 - find_package与CMake如何查找链接库详解

咳咳,对于外部库用的还不多,我目前的做法是:

1. link_directories( 链接库的文件夹目录 )
# add_executable 在它俩中间 位置不可变
2. target_link_libraries( 链接库名 )
3. 把链接库拷贝到 cmake-build-debug(那个橙色文件夹) 的 根目录 下 

主要注意的是:

如果使用的是MSVC,在Debug模式下,MSVC使用的库的后缀名都是-d.dll,比如说使用Qt5Core,需要链接的是 Qt5Cored.dll而不是 Qt5Core.dll

打开ui文件

Clion 打开Qt的ui文件
一个很久之前学到的小技巧,我忘了当时参照的是哪篇博客了,过程跟上面这个很像,不过现在没测试过是否成功

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

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

相关文章

Mysql—触发器

触发器 简介 触发器用于直接在某种操作后(数据的增删改查等),通过事件执行设置触发器时的 sql 语句,具有原子性。 可通过 sql 语句直接编写,关键词:CREATE TRIGGER 触发器名称。 例如:在表 st…

String面试题

String面试题 总结的很好:https://blog.csdn.net/qq_45950109/article/details/116992408 String特点 1.被final关键字修饰,不能被继承。实现Serializable,表示支持序列化。实现Comparable,表示可以排序。 2.底层是char数组和…

2023上半年软考报名到弘博创新错不了

软考是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。 系统集成…

ChatGPT为什么这么火爆?这是一篇从入门到玩坏的教程

什么是ChatGPT ChatGPT是由OpenAI开发的一个人工智能聊天机器人程序,于2022年11月推出。该程序使用基于GPT-3.5架构的大型语言模型並通过强化学习进行训练。 ChatGPT可以做什么? 你能想到的,它基本上都能和你聊上两句,比如写一…

功率放大器的增益是什么意思

电子工程师在日常实验测试中经常会应用到功率放大器,在介绍功率放大器产品的时候经常会看到增益的参数指标。下面安泰电子就来为大家介绍功率放大器增益是什么意思。 一、功率放大器增益的定义: 功率放大器作为一种电子电路,可以通过获取外部…

TCP连接的状态详解以及故障排查(六)

TCP通信中服务器处理客户端意外断开 如果TCP连接被对方正常关闭,也就是说,对方是正确地调用了closesocket(s)或者shutdown(s)的话,那么上面的Recv或Send调用就能马上返回,并且报错。这是由于close socket(s)或者shutdown(s)有个正…

SQL盲注加速方法总结

sql盲注加速方法总结 盲注分为布尔盲注和时间盲注,一般为加快测试速度都用工具或者脚本跑。但有时还是很慢,这时就需要采取另外办法。在参考了一些资料后经过实验总结可行方案如下。1.二分法加速、2.与运算加速、3.二进制延时注入加速、4.dnslog OOB外带…

[Java 进阶面试题] HashTable, HashMap, ConcurrentHashMap 之间的区别

大家一切顺利~ 文章目录前言HashTable, HashMap, ConcurrentHashMap 之间的区别前言 本篇主要内容如标题 HashTable, HashMap, ConcurrentHashMap 之间的区别 1.ConcurrentHashMap最大优化之处是相比于HashTable,ConcurrentHashMap大大缩小了所冲突的范围,把一把大锁切成了多…

全球爆火的ChatGPT,能否推动芯片市场增长?

“我所热爱的是我真实的生活,因为它包含了我所有的经历和感受,是我每一天都在体验和思考的。”这句非常有诗意的话,来自最近爆火的ChatGPT。 ChatGPT作为一款智能机器人,上知天文下知地理,不仅能写文案,还…

在github上上传文件

一、new新建一个仓库 填写/勾选下面三个部分 二、右键本地的要上传的文件,选择”Git Bash Here"进入。 进入git界面: 三、依次输入下面的命令 1、生成readme文件。 echo "# 在这里填入readme里面的内容" >> README.md2、建立…

(深度学习快速入门)第五章第一节1:GAN概述

获取pdf:密码7281 一:什么是生成模型 生成模型:在概率统计理论中,生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。为了训练一个生成模型我们首先要收集在特定领域下的大量数据&#xff…

Java开发学习(四十八)----MyBatisPlus删除语句之逻辑删除

1、逻辑删除 接下来要讲解是删除中比较重要的一个操作,逻辑删除,先来分析下问题: 这是一个员工和其所签的合同表,关系是一个员工可以签多个合同,是一个一(员工)对多(合同)的表 员工ID为1的张业绩,总共签了三个合同&a…

蓝桥杯刷题022——发现环(拓扑排序、DFS/BFS)

2017国赛 题目描述 小明的实验室有 N 台电脑,编号1⋯N。原本这 N 台电脑之间有 N−1 条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。 不过在最近一次维护网络时,管理员误操作使得某两台电…

centos7安装pdf2htmlEX

1 概述 需要把PDF 转成 html,使用的是 pdf2htmlEX 工具。 2 安装 2.1 安装基本工具和依赖库 yum install vim unzip wget git gcc* cmake poppler* libtool* glib* gio* freetype* pango* cairo* -y 2.2 安装fontforge 2.2.1 下载 wget https://github.com/coolwanglu/f…

koa2-JWT登录验证、上传图片、上传视频

文章目录什么是JWT?怎么使用?后端进行token处理,传递给前端Token的使用分成了两部分前端的处理处理token后端处理携带和不携带token的请求上传图片会持续更新上传视频会持续更新什么是JWT?怎么使用? JWT(JSON Web Token&#x…

K_A12_001 基于STM32等单片机采集火光火焰传感参数串口与OLED0.96双显示

K_A12_001 基于STM32等单片机采集火光火焰传感参数串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC火光火焰模块1.2、STM32F103C8T6火光火焰模块五、基础知识学习与相…

Revit中添加水平仰视平面图及水平剖面

一、 Revit中如何添加水平仰视平面图 在Revit平面视图中视角是俯视视角,但是在一些特殊的情况下,我们可能需要创建仰视视角的平面视图,例如我们需要向上看天花板的灯具布置的时候。 1.下面讲一下如何在添加仰视平面视图的方法。如图1在模型中…

STM32CubeMX+FATFS+FREERTOS实现W25Q256虚拟U盘

一、软件硬件说明软件:STM32CubeMX V6.6.1 /KEIL5 V5.29硬件:正点原子阿波罗开发板,核心板STM32F429IGT6(176脚)使用USB_SLAVE接口连接电脑USB,从而读取W25Q256里的文件W25Q256:SPI5接口二、STM32CubeMX配置RCC配置SYS…

Lecture3 梯度下降(Gradient Descent)

目录 1 问题背景 2 批量梯度下降 (Batch Gradient Descent) 3 鞍点(Saddle Point) 3 随机梯度下降 (Stochastic Gradient Descent) 4 小批量梯度下降 (Mini-batch Gradient Descent) 1 问题背景 图1 上节课讲述的穷举法求最优权重值在Lecture2中,介绍了使用穷举…

python+django校园在线拍卖系统pycharm项目源码

登录页和注册页 管理员、用户和拍卖者都可以在此页面登录到该系统 拍卖者注册的页面,拍卖者如果没有账号可以点击注册进入到系统 开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 数据库工具&…