QT5 MinGW切换MSVC编译问题

QT5 MinGW切换MSVC编译遇到编译不过问题

例:
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //中文注释
    QString str = tr("否");
    QString str1 = tr("否z");
    //中文注释啊
    ui->label->setText(str);
}

问题点描述:
源代码文件是无BOM的utf-8编码格式,QtCreator用MinGW编译OK,切换成MSVC后报错:
mainwindow.cpp(1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
mainwindow.cpp(23): error C2001: 常量中有换行符
mainwindow.cpp(24): error C2146: 语法错误: 缺少“)”(在标识符“QString”的前面)
mainwindow.cpp(24): error C2146: 语法错误: 缺少“;”(在标识符“QString”的前面)

解决方式1:
①在工程pro文件中添加

msvc {
    QMAKE_CFLAGS += /utf-8
    QMAKE_CXXFLAGS += /utf-8
}

解决方式2:
①将源代码文件改为有BOM的utf-8编码格式,
②在报错的文件开头加入(指定执行字符集)

#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

源字符集和执行字符集都是utf-8不会出现乱码问题。

### QTMinGWMSVC2022 的区别及适用场景 #### 编译器差异 MinGW (Minimalist GNU for Windows) 和 MSVC (Microsoft Visual C++) 是两种不同的编译工具链,在构建 Qt 应用程序时提供了不同特性。 对于 MinGW 而言,这是基于 GCC 的一套开发工具集,适用于 Windows 平台上的开源项目。其优势在于完全兼容 POSIX API,并且可以生成不依赖于特定厂商运行库的应用程序[^1]。 相比之下,MSVC 则是微软官方推出的集成开发环境及其附带的编译器套件。当目标平台设置为 Microsoft Visual C IDE而非命令行编译器时会启用相应配置选项;此外还定义了 `MSVC_VERSION` 变量来表示所使用的具体版本号。这使得开发者能够利用最新的优化技术以及调试功能。 #### 性能表现 通常情况下,由 MSVC 构建出来的二进制文件执行效率更高一些,因为该编译器针对 Intel/AMD CPU 做了很多底层优化工作。而 MinGW 所产生的可执行文件虽然也能满足大多数日常需求,但在某些复杂计算密集型任务上可能稍逊一筹。 #### 开发体验 使用 MSVC 进行开发可以获得更好的IDE支持,包括但不限于更智能的语法提示、错误检测等功能。而对于习惯 Linux 或者跨平台工作的程序员来说,MinGW 提供了一个更加熟悉的编程环境,因为它遵循标准 Unix 工具链的工作方式。 #### 部署便利度 如果应用程序计划发布给一般用户,则需要注意两者之间存在一定的部署难度差别。由于 MSVC 创建的应用往往需要额外安装对应的 VC++ Redistributable Package 来提供必要的 DLL 文件支持,增加了分发过程中的不确定性因素。相反地,采用 MinGW 编译得到的结果则相对独立得多,减少了对外部组件的依赖程度。 ```cpp // 示例代码片段展示如何判断当前使用的编译器类型 #if defined(_MSC_VER) // 使用的是 MSVC 编译器 #elif defined(__MINGW32__) // 使用的是 MinGW 编译器 #endif ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值