环境搭建
安装Virsual Studio,版本可以选择最新版本,我安装的时vs2022,安装时需要勾选 C++ 桌面开发
安装QT, 下载地址:https://download.qt.io/official_releases/online_installers/,安装时需要选择MSVC 2019 64-bit。
安装完后会有,Qt Creator 、Qt Maintenance Tool 等等工具。其中 Qt Maintenance Tool 用来添加或删除Qt组件,所以没有的用到的组件暂时不用安装,后续用到时再安装。
环境变量配置,将Qt msvc 组件的Bin目录(C:\Qt\6.4.1\msvc2019_64\bin)添加到Path环境变量中。因为Qt编译时需要用到该目录下的moc.exe,rcc.exe(资源编译),uic.exe(UI编译)等等。
Clion配置,在Clion中添加visual studio工具链,如果更方便使用UI设计工具等,可以配置一下外部工具,不配置也没有关系,外部工具配置参考:https://zhuanlan.zhihu.com/p/519409942。忽略参考里面的工具链的配置。
环境变量的作用
Qt是使用CMake进行编译的,CMake编译时需要调用moc.exe,rcc.exe,uic.exe编译一些QT宏,资源,UI等。这些可以通过Path环境变量查找到。
帮助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源码
下载源码,打开Qt Maintenance Tool,在对应版本中选择Sources和Qt Debug Information Files。如果没有对应的组件,在右侧选择四个筛选项,并点击筛选按钮。
在Qt安装目录对应的版本目录下会有源码。其在bin目录下所有DLL会有对应的 *.pdb调试符号文件。
在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源码了。