VS+QT
- C++开发QT的方式
- VS+QT和QT Creater的区别
- VS+QT使用:入门案例——加法器
- 创建项目
- UI文件
- 运行项目
- 编辑UI界面
- 代码交互编写
- 中文显示乱码
C++开发QT的方式
C++开发QT有两种方式,一种是VS+QT,还有一种是QT Creater。
QT Creater的用法已经在C++学习| QT快速入门中写过了,本篇主要是说一下VS+QT的使用方法,以及该方法和QT Creater的区别。
VS+QT和QT Creater的区别
主要是讲一下VS+QT和QT Creater大体上的区别,一些具体的操作细节区别,会在下一部分的VS+QT使用上详细讲解。
VS+QT:
- 优势:
- VS IDE加持,写代码和Debug都很方便。
- 熟悉过VS的话,上手写代码,安装配置什么得很方便。
- 劣势:
- 修改Ui文件之后,可能要先对Ui文件进行编译。
- 提示功能不如Qt Creator那么全。
- 对汉字支持不太好,需要做别的处理。
QTCreater:
- 优势:
- 实现Ui和代码快速切换。
- 项目管理方便,可以添加pri等来管理子模块。
- 新手上手QT来说比较友好。
- 对汉字的支持更好。
- 劣势:
- Debug困难。
- 项目需要配置一些文件的时候,会比较麻烦。
我个人体验来说,需要配置很多环境文件的项目用VS+QT比较合适,尤其是从原本VS编写的项目迁移的时候。最近需要把mfc项目重构,希望重构后界面能好看点,于是想要用QT。但是,当编写到需要配置一些环境时候,网上QT Creater相关的很少,VS相关的很多。QT Creater配置cuda等各种环境文件,很麻烦,这时候如果用VS+QT,那么配置这些东西就回到和原来项目相同的模式,只不过界面编写用QT。
VS+QT使用:入门案例——加法器
关于VS配置QT的内容,在之前我的另一个篇博客QT下载安装、VS配置QT就讲解过了。
创建项目
打开VS,选择新建项目的时候能够看到QT选项,会有很多种QT项目选择,根据自己需要看介绍选择即可。
因为我主要是使用QT做桌面应用,就选择QT Widgets Application进行创建。
会进入QT应用程序创建的界面。
后续剩下步骤,命名好,默认的就行。
UI文件
项目文件介绍:新建项目后,可以在解决方案中看到所有相关的文件,其中的ui是QT界面相关的文件,qrc则是QT资源相关管理文件。
跳转QT Designer:通常双击即可跳转到QT Designer进行可视化编辑界面,但是可能会遇到双击打不开的情况,例如下图。
遇到打不开的情况可能是打开方式出现了问题,可以常试以下两种方法。
第一种方法,打开方式设置为QT Designer为默认值。
如果QT Designer设置为了默认值还是不行,可能是QT Designer的路径有问题。
第二种方法,自行添加一个新的QT Designer,路径为自己安装QT路径下的msvc后面bin中QT Designer的路径(我的路径为E:\QT\6.6.1\msvc2019_64\bin\designer.exe),然后在给个不同于QT Designer的友好名称,我给了个QT Designer的中文翻译“QT设计师”作为友好名称。
这时候双击ui文件就会自动跳转到QT Designer了,界面和QT Creater的设计界面差不多。
运行项目
直接运行即可。
如果报错没法找到QWidget等QT相关的类,可以右键项目->属性->C/C+±>常规->附加包含目录,添加QT的include路径(我的路径为E:\QT\6.6.1\msvc2019_64\include)。
注意自己的msvc版本,由于我安装的QT6配置的是msvc2019版本,意味着VS最少要2019,所以我原本一直用的VS2017没法运行成功,我又重新安装了VS2022。VS版本换了后,QT相关的配置方案和之前是一样的没有变化。
编辑UI界面
在QT Designer编辑加法器的UI界面,通过拖拽控件到界面上,最终形成如下界面。不同控件可以双击对象检查器中控件对象修改objectname,来让对象名字更加直观,方便代码操控。
代码交互编写
思路:为加法按钮添加槽函数,QT Creater中可以用“转到槽”来完成自动关联,但是VS+QT是没有“转到槽”的选项的,所以需要用connect手动关联槽函数。
可能会遇到的几个问题:
- VS中代码不识别QT里面的控件对象名字:先点击ui文件右键选择“编译”,再点击项目右键选择“重新扫描解决方案”,注意不是“重新生成解决方案”。
- connect手动关联失效:要把槽函数写在“public slots:”后面,不能像QT Creater那样只写在“public:”后面。
- VS+QT操作ui类的成员:ui在VS+QT中是变量,而在QT Creater中是指针,所以操作里面的成员的时候,QT Creater用的“->”,而VS+QT用的是“.”。
完整的代码:
Test.h
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_Test.h"
class Test : public QMainWindow
{
Q_OBJECT
public:
Test(QWidget *parent = nullptr);
~Test();
public slots:
void onAddButtonClicked();// 加法按钮的槽函数声明
private:
Ui::TestClass ui;
};
Test.cpp
#include "Test.h"
Test::Test(QWidget* parent)
: QMainWindow(parent)
{
ui.setupUi(this);// 在QT Creater中,ui是指针只能用->操作。
this->setWindowTitle("加法器");
// 手动关联
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(onAddButtonClicked()));
}
Test::~Test()
{}
void Test::onAddButtonClicked()
{
// 获取lineedit的数据
QString a_str = ui.input1->text();
QString b_str = ui.input2->text();
// 把QString转为int
int a = a_str.toInt();
int b = b_str.toInt();
// a和b相加
int ans = a + b;
// 设置结果显示在label上
ui.label->setText("结果:" + QString::number(ans, 10));
}
运行结果:
中文显示乱码
产生原因:Qt creator是跨平台的,所以编码格式默认为utf-8格。但是VS不是跨平台的,是windows下的原生IDE,windows的系统编码为GBK格式。VS打开Qt creator编写的文件的时候,按照utf-8编码,gbk来解码,编码和解码不对应,需要做得就是统一两者的编码。英文不会乱码,是因为UTF-8和GB2312在单字节字符部分是兼容的。
解决方案:网上相关的方法有很多种,例如修改高级保存选项为“utf8带签名:、添加“#pragma execution_character_set(“utf-8”)”在头文件、安装扩展Force URF-8 with BOM等。这些方法我在VS2022+QT6上面试过都不行,但是后来我用了安装扩展Format on Save for VS2022成功。
安装后在工具->选项中,进行设置utf8。