Qt MSVC开发

news2024/11/26 6:19:10

环境搭建

  1. 安装Virsual Studio,版本可以选择最新版本,我安装的时vs2022,安装时需要勾选 C++ 桌面开发

  1. 安装QT, 下载地址:https://download.qt.io/official_releases/online_installers/,安装时需要选择MSVC 2019 64-bit。

安装完后会有,Qt Creator 、Qt Maintenance Tool 等等工具。其中 Qt Maintenance Tool 用来添加或删除Qt组件,所以没有的用到的组件暂时不用安装,后续用到时再安装。

  1. 环境变量配置,将Qt msvc 组件的Bin目录(C:\Qt\6.4.1\msvc2019_64\bin)添加到Path环境变量中。因为Qt编译时需要用到该目录下的moc.exe,rcc.exe(资源编译),uic.exe(UI编译)等等。

  1. Clion配置,在Clion中添加visual studio工具链,如果更方便使用UI设计工具等,可以配置一下外部工具,不配置也没有关系,外部工具配置参考:https://zhuanlan.zhihu.com/p/519409942。忽略参考里面的工具链的配置。

环境变量的作用

  1. Qt是使用CMake进行编译的,CMake编译时需要调用moc.exe,rcc.exe,uic.exe编译一些QT宏,资源,UI等。这些可以通过Path环境变量查找到。

  1. 帮助find_package(Qt6 REQUIRED COMPONENTS Widgets)查找Qt CMake组件。如果不配置环境变量就需要在CMake中添加set(CMAKE_PREFIX_PATH "C:/Qt/6.4.1/msvc2019_64")。CMake在查找组件时可以自动去掉Path变量目录中的bin目录进行查找,所以设置环境变量后就无需设置CMAKE_PREFIX_PATH变量。

控制台输出

开发时需要使用qDebug、std::cout等向控制台用于输出调试信息。Qt Creator创建的窗口程序默认情况下,在Qt Creator在非调试时可以正常显示,但调试的时候不正常。如在CLion中无论时运行和调试都显示不正常。

原因与解决方法

std::cout输出

默认情况下创建的是Qt窗口程序创建的是一个win32程序。你可能会觉得奇怪,win32程序的主函数是winMain,但Qt写的主函数是main。这最主要是Qt封装了主函数winMain,让所有程序的主函数都是main。这个可以通过调试堆栈看到。

win32程序默认情况下是不创建控制台窗口的,所以没法显示std::cout输出。我们也可以通过代码手动创建一个控制台窗口,但这个没法直接输出到CLion的控制台窗口。最好的方法是修复CMake改变程序类型,直接创建一个控制台程序。可以通过修改WIN32_EXECUTABLE为FALSE 将程序改为控制台程序,修改的时候可以通过是Debug还是Release来判断是否修改。

Qt修改默认输出流的缓存,导致需要手动 flush才能立即显示当前消息,所以没有消息最后输出完最好加上std::endl。

QDebug输出

默认情况下QDebug输出使用的函数是OutputDebugString函数,这个函数会在visual studio中一个Debug窗口中输出一条消息,但CLion中没有这个窗口。如果想要将QDebug输出到控制台,可以通过添加一个环境变量QT_FORCE_STDERR_LOGGING,并将值为1。也可以通过以下代码为当前运行程序添加环境变量来控制输出,这个需要第一次调用qDebug函数前设置:

qputenv("QT_FORCE_STDERR_LOGGING", QByteArray{"1"});

控制台乱码

Qt的QString使用的是UTF-16编码,所以程序最好使用UTF-8编码,这样可以更好的避免乱码的出现。具体如何使用UTF-8编码请参考:https://blog.csdn.net/wlk1229/article/details/128363989?spm=1001.2014.3001.5501

调试Qt源码

  1. 下载源码,打开Qt Maintenance Tool,在对应版本中选择Sources和Qt Debug Information Files。如果没有对应的组件,在右侧选择四个筛选项,并点击筛选按钮。

在Qt安装目录对应的版本目录下会有源码。其在bin目录下所有DLL会有对应的 *.pdb调试符号文件。

  1. 在Qt Creator中设置源码映射,[Edit->preference...->Debugger->Add Qt sources...]选择源码目录。

CLion中调试源码

CLion中没有源码映射(也许是我没找到设置方法),不能通过上面的方法调试源码。

要使用CLion调试代码首先确定Qt Creator中哪个映射目录起作用,可以通过删除Qt Creator中源码映射项来确定。确定之后可以创建一个Source path目录,把Qt代码拷贝到对应的Source path目录。

我测试的源码映射目录是"C:\Users\qt\work\qt",并把源码拷贝到了对应目录,后面CLion就可以调试Qt源码了。

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

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

相关文章

Packet Tracer - 配置 RIPv2

Packet Tracer - 配置 RIPv2 目标 第 1 部分:配置 RIPv2 第 2 部分:验证配置 拓扑图 背景信息 尽管在现代网络中极少使用 RIP,但是作为了解基本网络路由的基础则十分有用。 在本活动中,您将使用适当的网络语句和被动接口配置…

【LeetCood206】反转链表

题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 答案1: 新建链表,遍历原链表,一个一个头插到新建的链表.直到结点为null public ListNode reverseList(ListNode head) {ListNode secondListHead n…

【细读Spring Boot源码】监听器合集-持续更新中

前言 监听器汇总 归属监听器名称作用cloudBootstrapApplicationListenercloudLoggingSystemShutdownListenercloudRestartListenercloudLoggingSystemShutdownListenerspringbootEnvironmentPostProcessorApplicationListener用于触发在spring.factories文件中注册的Environm…

osg操控器之动画路径操控器osgGA::AnimationPathManipulator分析

目录 1. 前言 2. 示例代码 3. 动画路径操控器源码分析 3.1. 构造函数 3.2. home函数 3.3. handle函数 3.3.1 帧事件处理 3.3.2. 按键事件处理 4. 主要接口说明 1. 前言 osg官方提供了很多操控器,在源码目录下的src\osgGA目录下,cpp文件名含有Ma…

初识AUTOSAR

目录 应用层 Runnable Port 运行时环境 基础软件层 总结 AUTOSAR,全称为Automotive Open System Architecture,即汽车开放系统架构。它最初于2003年由当时全球各家顶级汽车制造商(奔驰、宝马、大众等)、零部件供应商&#x…

【Unity入门】21.预制体

【Unity入门】预制体 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)预制体制作 (1)什么是预制体 这一章节的博客,我们将会学习一个预制体的概念。什么是…

【C语言进阶】-- 重点字符串函数内存函数及其模拟实现(strlen,strcmp,strcat...memcpy,memmove)

目录 1、strlen 1.1 strlen的模拟实现 2、strcpy 2.1 strcpy的模拟实现 3、strcat 3.1 strcat的模拟实现 4、strcmp 4.1 strcmp的模拟实现 5、strstr 5.1 strstr的模拟实现 6、memcpy 6.1 memcpy的模拟实现 7、memmove 7.1 memmove的模拟实现 前言 C语言中对字符…

Ant Design Vue,a-table组件加序号

<a-table:columns"columns":pagination"pagination":data-source"dataSource":defaultExpandAllRows"true"change"tableChange":rowKey"(record, index) > index 1"> columns是表格列的配置&#xff0c…

【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码

【2023五一杯数学建模】 B题 快递需求分析问题 1 题目 请依据以下提供的附件数据和背景内容&#xff0c;建立数学模型&#xff0c;完成接下来的问题&#xff1a;问题背景是&#xff0c;网络购物作为一种重要的消费方式&#xff0c;带动着快递服务需求飞速增长&#xff0c;为我…

25特别放送:我的Gopher成长之路

很早就开始准备这篇文章了,但总是想了又想不知怎样才能更好的写下自己最真实的想法,后来在经过了好几个晚上睡前的思考后才得以完成。 首先,写这篇文章的目的并不是为了吹嘘Go语言有多厉害,也不是鼓励大家都来学习Go语言,仅是为了记录和分享。当然如果是兴趣使然,那么欢…

实时更新天气微信小程序开发

1.新建一个天气weather项目 2.在app.json中创建一个路由页面 当我们点击保存的时候&#xff0c;微信小程序会自动的帮我们创建好页面 3.在weather页面上书写我们的骨架 4.此时我们的页面很怪&#xff0c;因为没有给它添加样式和值。此时我们给它一个样式。&#xff08;样式写在…

蓝桥杯——二分专题

二分分为&#xff1a;实数二分&#xff0c;二分理论题 二分套路题&#xff1a;最小值最大化&#xff0c;最大值最小化 运用二分满足条件&#xff1a;有界&#xff0c;单调。 1.两个二分模板 找>x的第一个&#xff0c;mid&#xff08;lowhigh&#xff09;//2 &#xff0c;没…

java基础知识——23.正则表达式

这篇文章我们简略的讲一下java的正则表达式 目录 1.正则表达式概述 2.正则表达式的简单匹配规则 3.正则表达式的复杂匹配规则 4.正则表达式的分组匹配规则 5.正则表达式的非贪婪匹配 6.使用正则表达式进行搜索和替换 1.正则表达式概述 首先&#xff0c;我们需要明确一个…

leetcode 面试题 02.04. 分割链表

原题为&#xff1a; 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在大于或等于x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 测试示例如下&#xff1a; 输入&#xff1a;head [1,4…

Flink第一章:环境搭建

系列文章目录 Flink第一章:环境搭建 文章目录 系列文章目录前言一、Idea项目1.创建项目2.pom.依赖3.DataSet4.DataStreaming 二、环境搭建1.Standalone2.Flink on Yarn 总结 前言 Flink也是现在现在大数据技术中火爆的一门,反正大数据的热门技术学的也差不多了,啃完Flink基本…

Packet Tracer - 研究直连路由

Packet Tracer - 研究直连路由 目标 第 1 部分&#xff1a;研究 IPv4 直连路由 第 2 部分&#xff1a;研究 IPv6 直连路由 拓扑图 背景信息 本活动中的网络已配置。 您将登录路由器并使用 show 命令发现并回答以下有关直连路由的问题。 注&#xff1a;用户 EXEC 密码是 c…

A2B汽车音响系统开发设计与改装

hezkz17进数字音频系统研究开发答疑群 1 前装与后装

安装了Volar插件vue文件没有显示Volar的图标

vue3官网 推荐使用Volar来替换Vetur 一、安装Volar 安装Volar前&#xff1a; 安装Volar后&#xff1a; 二、安装Volar插件后&#xff0c;无法显示高亮 之前我安装Volar插件后&#xff0c;vue文件的<script>、<template>、<style>标签仍然是白色的&#xff0c…

Doris(17):动态分区

动态分区是在 Doris 0.12 版本中引入的新功能。旨在对表级别的分区实现生命周期管理(TTL)&#xff0c;减少用户的使用负担。 目前实现了动态添加分区及动态删除分区的功能。 1 原理 在某些使用场景下&#xff0c;用户会将表按照天进行分区划分&#xff0c;每天定时执行例行任…

【网课平台】Day14.集成RabbitMQ:消息队列实现异步通知

文章目录 一、需求&#xff1a;支付通知1、需求分析2、技术方案3、集成RabbitMQ4、生产端发送消息5、消费方发送消息 二、需求&#xff1a;在线学习1、需求分析2、表设计与实体类3、接口定义--查询课程4、接口定义获取视频5、Service层开发6、FeignClient定义7、代码完善 三、需…