Qt MSVC开发

article/2025/10/21 4:23:21

环境搭建

  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://chatgpt.dhexx.cn/article/XAJYRRm4.shtml

相关文章

MSVC编译器介绍

MSVC简介: 与Linux系列操作系统不同,Windows原生环境不提供类似gcc,Clang的C/C语言源程序编译运行工具链。运行在Windows上的IDE(集成开发环境),比如CodeBlocks之类,一般都使用MinGW&#xff0…

PAC的编码

PAC的编码 今晚的沙龙讲到了PAC,在此搬运一下比较简单易懂的部分。 PAC的编码是基于类似于两个D触发器的思路,也就是和时序有关。 PAC编码的思路导图,如下所示:

windows 开启pac,完成规则代理

特别鸣谢 10分钟搭建linux代理服务器_三雷科技的博客-CSDN博客 Windows7/10/11 Pac代理脚本及配置_pac脚本_ylf尘风的博客-CSDN博客 1. 代理服务器搭建 yum install tinyproxy代理服务器,配置 编辑配置/etc/tinyproxy/tinyproxy.conf: (1&…

解析PAK文件

工具好不好主要看用的人 ----Mantra 众所周知,UE4打包之后生成的资源文件被压缩成.pak格式,那么如何找到合适的工具提取其中的资源呢?(既然UE4是开源的,那么UE4的打包工具也应该是开源的,所以大佬们逆流而…

代理自动配置文件PAC的使用方法

注意: 1、微软从Internet Explorer(IE)11版本开始,已经弃用本地PAC文件的方式(也就是我们说的“file://”方式)配置自动代理了,只能通过http或者https方式加载代理自动配置的PAC文件 2、 Chrome…

pacp格式文件分析

1 介绍 1.1. 五元组 网络通信过程中会发送大量的请求,每一个请求都需要通过IP数据包进行交互,但是IP数据包的头部信息过于复杂,如果通过IP数据包头进行数据包之间的区分就太复杂了,所以就产生了元组。 五元组是元组中的一种&am…

【pac文件】win10自动配置代理

目的 手动代理:所有地址经过代理,指定ip不经过代理 现在需求:实现指定ip范围才使用该代理 可以通过“自动设置代理”的方式实现 准备 已有代理地址,如:192.168.18.101:808有python环境 自动代理配置 编写sxProxy.…

实战PyQt5: 120-像素图QPixmap和QBitmap

Qt提供了四个用于处理图像数据的类:QImage,QPixmap,QBitmap和QPicture。QImage是为I/O设计的,并且针对直接的像素访问和操作做了优化,QPixmap是为在屏幕上显示图像而设计和优化的。QBitmap为继承自QPixmap的便利类。如…

Qt实战案例(54)——利用QPixmap设计图片透明度

目录 一、项目介绍二、项目基本配置三、UI界面设置四、主程序实现4.1 widget.h头文件4.2 widget.cpp源文件 五、效果演示 一、项目介绍 本文介绍利用QPixmap设计图片透明度,可以看到拖动下方进度条,用于控制上方图片的透明度。 二、项目基本配置 新建…

利用QPixmap显示图片

我们来实现在窗口上显示图片,并将图片进行平移,缩放,旋转和扭曲。这里我是利用QPixmap类来实现图片显示的。 一、利用QPixmap显示图片。 1.将以前的工程文件夹进行复制备份,我们这里将工程文件夹改名为painter05。(经…

PyQt5基本控件详解之QPixmap(十九)

QPixmap 前言 QPixmap类用于绘图设备的图像显示,它可以作为一个QPainterDevice对象,也可以加载到一个控件中,通常是标签或者按钮,用于在标签或按钮上显示图像 QPixmap可以读取的图像文件类型有BMP,GIF,JP…

[PyQt5]基本控件9 - 图片显示QPixmap

文章目录 PyQt5系列文章效果图完整代码 PyQt5系列文章 基本控件---1.按钮QPushButton2.标签QLabel3.可编辑框QTextEdit4.文本提示QToolTip5.单行输入框QLineEdit6.消息框QMessageBox7.单选按钮QRadioButton8.下拉列表QComboBox9.图片显示QPixmap10.分组框QGroupBox11.进度条QP…

关于QPixmap/QImage/QPicture

Qt学习之路(29):绘图设备(2) 绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和 QPicture。其中,QPixmap专门为图像在屏幕上的显示做了优化&a…

QPixmap、QBitmap、QImage 與 QPicture

在處理影像資料上,Qt提供了QPixmap、QBitmap、QImage與QPicture等類別。 一. 几种类的简介 QPixmap繼承了QPaintDevice,您可用以建立QPaint er並於上進行繪圖,您也可以直接指定圖案載入Qt所支援的圖檔,像是BMP、GIF、JPG、JPEG、…

QPixmap使用scaled()函数缩放失败

因为需要,需要将QPixmap在控件上显示并进行缩放,将其缩放成与控件一般大; 但是发现并没有缩放成功(见图一); 看下代码: QPixmap pixmap;if(pixmap.load(url)) {pixmap.scaled(width(), height…

QPixmap显示图片

我们来实现在窗口上显示图片,并将图片进行平移,缩放,旋转和扭曲。这里我是利用QPixmap类来实现图片显示的。 一、利用QPixmap显示图片。 1.将以前的工程文件夹进行复制备份,我们这里将工程文件夹改名为painter05。(经…

QT绘制图像QImage-QPixmap-QBitmap-QPicture

QT绘制图像QImage-QPixmap-QBitmap-QPicture #ifndef MAINWINDOW10_8_H #define MAINWINDOW10_8_H#include <QMainWindow>QT_BEGIN_NAMESPACE namespace Ui { class MainWindow10_8; } QT_END_NAMESPACEclass MainWindow10_8 : public QMainWindow {Q_OBJECTpublic:MainW…

QT使用QLabel控件显示图片,报错:QPixmap::scaled: Pixmap is a null pixmap

Label 和 pushButton 两个控件 实现点击 按钮 标签显示图片的功能 槽函数如下 Widget.cpp 同级目录img中有图片 1.png 但是点击后报错&#xff1a;QPixmap::scaled: Pixmap is a null pixmap 在网上看了很多帖子&#xff1a; 文件名改为英文&#xff08;未解决问题&#xff09;…

图像处理QPixmap、Picture、QBitmap

QPixmap 类是一种可用作绘制设备的屏幕外图像表示形式。 QPixmap可以使用QLabel或QAbstractButton的子类之一可以轻松显示在屏幕上 QPixmap 对象可以按值传递&#xff0c;因为 QPixmap 类使用隐式数据共享&#xff0c;也可以流式传输。 QPixmap可以和QImage之间进行转换&…

基于Qt的QPixmap和Qimage实现无锯齿圆角图片设置

简述 开发环境&#xff1a;Window10&#xff0c;Qt 5.9.9 &#xff0c;mingw32 近期做的用来展示图片的软件&#xff0c;涉及到使用QLabel控件和QPixmap类来显示圆角图片。 查了一些资料&#xff0c;发现实现的基本步骤是&#xff1a; 1.读取图片。通过Qt中的QImage或Qpixmap…