在Visual Studio 下开发
Visual Studio 2017
使用Visual Studio编译Qt,需在安装qt时,选择MSVS2017编译套件。安装VS时,需要安装C++桌面套件。
安装VS时选择“使用C++的桌面开发”,其他可以不选。
安装完成以后,选择“工具”-扩展和更新-联机 在搜索框中输入“qt”,安装“Qt Visual Studio Tool”即可。如果无法联网安装,则可以去清华大学镜像中下载离线的vsix包,下载好后双击即可安装,注意插件安装过程需要关闭vs,才能安装。
重启VS即可看到目录栏中新增Qt VS Tools,下拉选择Qt Option - Qt Version - Add - 安装 Qt的路径(直到msvs2017_64)。
重启VS即可在新建项目中新建Qt项目。
Visual Studio 2019
- 在2019版本下,是在"扩展-管理扩展"下,搜索Qt,安装Qt Visual Studio Tool。
- 如果安装过程出现异常,或者联机失败,则可以自己去下载这个扩展。清华大学的镜像提供非常完成的各个开源库镜像,可以有效解决国内访问速度慢的问题。https://mirrors.tuna.tsinghua.edu.cn/,找到Qt-archive-vsaddin,里面有各个版本的vs插件。选择最新的,根据vs的版本号下载对应的插件即可。
- QtCreator创建的工程和VS中创建的工程,两者都是可以互相转换的。在插件的Open Qt Project……可以直接打开Qt Creator创建的工程,但是有时提示**“未将对象引用设置到对象的实例”**,则创建失败后,重新从项目文件夹下打开vcxproj尾缀的文件即可。
Qt+VS常用操作
添加功能块
在Qt Creator中是在.pro文件添加功能块,但是在VS中并没有pro文件。需要在项目右击,选择属性,在Qt Project Settings中的Qt Modules中添加相应的功能块。
添加lib库函数
-
准备:使用Qt调用lib库函数,一般需要准备
*.h
、*.dll
、*.lib
三个文件。 -
给项目工程添加文件:把
*.dll
、*.lib
这2个文件,复制到工程的x64下的Debug文件夹下(注意,使用x64编译,需要使用x64生成的*.dll
、*.lib
)。*.h
复制到工程源码目录下。
-
配置库路径:点击项目的属性–VC++目录–库目录,添加工程下的x64的Debug路径,因为里面包含了lib文件。在项目属性–链接器–常规–附加库目录,同样添加x64下的Debug路径。
-
添加依赖项:在项目属性–链接器–输入–附加依赖项,添加对应的
*.lib
文件。 -
配置好了之后,就可以正常编译了。
-
最后运行的时候,还是提示没有找到dll文件,需要将dll和lib复制到工程目录下的x64的Debug文件下。
出现的问题及解决
使用VS,打开ui文件不能打开Qt Designer,导致闪退
- 在ui文件->选择“打开方式”->选中QtDesigner->点击移除->再点击添加。
- 在对话框中选择安装路径下msvc的bin路径下的designer.exe,如D:\QT5.13\5.13.0\msvc2017_64\bin
- 最后把新添加的designer设置为默认值,保存即可打开。
输出内容中文乱码问题
参考链接
显示乱码,主要原因是VS默认编码是GB2312,而Qt的编码为UTF-8。需要在vs中弃用GB2312,采用UTF8-BOM编码。
步骤:
-
vs默认“高级保存选项”是关闭的,所以要先设置选项可见。
-
VS菜单栏–工具–自定义
-
菜单栏选择”文件”–添加命令
-
左侧选择文件,右侧找到高级保存选项,点击确定
-
设置编码为UTF-8 BOM编码
(仅对当前文件生效,故所有包含中文的源文件都应该如此设置一下)
文件–高级保存选项–设置编码如下图(如果高级保存选项是灰色不可选中,任意改动一下代码文件就好了)到了这一步,其实项目源代码保存格式已经是UTF-8了,所以直接用QT Creator打开应该是正常显示中文的,但是VS编译结果仍旧会是乱码,因此还要设置一下编译器选项 -
设置编译器附加选项(仅对当前项目生效),这种方案可能只有VS 2015及以后版本有效,本人测试环境为Visual Stdio 2019 community版本
项目右键–属性–C/C++–所有选项–附加选项–写入“/utf-8”–确定
如果是中文常量的话,Qt5还提供了一个专门的处理宏,但是只能处理常量。
QMessageBox::information(this, QString::fromLocal8Bit("关于"), QStringLiteral("中文显示"));
const char* info = "中文显示";
//不支持
QString strInfo = QStringLiteral(info);
//支持
QString strInfo = QString::fromLocal8Bit(info);
qDebug()中文乱码问题
- 确保项目源码为UTF-8编码。
- 输出改成
qDebug()<<QString::fromUtf8("哈哈")
编辑完ui文件,但是源文件代码不更新的问题
是因为ui文件需要执行编译后,才会生成新的源文件,右击ui文件即可编译。
"常量中有换行符"的问题
Qt Creator的工程用VS打开,编译出现“常量中有换行符”的问题。
在项目-属性-常规-字符集,将字符集设置为多字符集。
在同一目录下的c/c+±命令行-其他选项的末尾添加/utf-8