从另一个 IDE (Qt Creator) 为 MSVC 编译器设置字符集

Posted

技术标签:

【中文标题】从另一个 IDE (Qt Creator) 为 MSVC 编译器设置字符集【英文标题】:Setting Character set for MSVC compiler from another IDE (Qt Creator) 【发布时间】:2012-10-04 07:50:54 【问题描述】:

我正在尝试使用 Microsoft Visual C++ Compiler 10.0 (x86) 在 Qt Creator 中编译旧代码,但遇到了经典错误:

无法将参数 1 从 'char *' 转换为 'LPCWSTR'

与其编辑代码(我不应该这样做,它是一个 3rd 方 SDK),解决方案是进入 Visual Studio 常规设置并将字符集更改为

'使用多字节字符集'

(如here 和here 所述)

但是,我没有使用 Visual Studio IDE,也没有该设置。所以我需要知道在代码/编译方面实际做了什么设置。它是否设置了编译器标志或#define?如何在 Qt Creator 中实现同样的效果?

【问题讨论】:

【参考方案1】:

在 Visual Studio 中快速检查一下,这是我发现的:

如果选项是使用 Unicode 字符集,您将拥有以下两个编译器选项:

/D "_UNICODE" /D "UNICODE"

但是,如果是使用多字节字符集,您将拥有:

/D "_MBCS"

因此,您要么需要更新命令行并将/D "_UNICODE" /D "UNICODE" 更改为/D "_MBCS",要么在某处#define _MBCS 符号。

【讨论】:

很酷,谢谢,这里的这个页面证实了你所说的msdn.microsoft.com/en-us/library/ey142t48(v=vs.80).aspx Qt 似乎自动为您定义了 UNICODE,并且无法从您的项目中取消定义它。您可以将 /D "_MBCS" 添加到 QMAKE_CXXFLAGS qmake 变量中,但 /D "UNICODE" 和 /D "_MBCS" 最终会作为参数传递给 cl。要使多字节字符集成为 Qt Creator 中的默认设置,您必须为您的 MSVC 设置编辑 qmake.conf 文件,我的位于:C:\QtSDK\Desktop\Qt\4.8.0\msvc2010\mkspecs\win32- msvc2010 在定义行上,您需要删除 UNICODE 并添加 _MBCS。不是一个很好的解决方法,但 Qt Creator 没有像 Visual Studio 那样为您提供 UI 选项来更改它。 @oggmonster。通过将以下内容添加到我的 .pro 文件中,我能够删除 UNICODE 定义并添加 _MBCS。定义 -= UNICODE 定义 += _MBCS【参考方案2】:

它必须在您的代码中调用一些 MFC 函数,这些函数使用“LPTSTR”等, 旧的 .h 文件,可能包括:StdAfx.h,只需编辑它:

#ifdef _MSC_VER

#define assert ASSERT
#define snprintf _snprintf

//remove UNICODE define
#ifdef UNICODE
#undef UNICODE
#endif

#include <afxwin.h>

#endif

那么它会在没有 Unicode 定义的情况下通过, 无需修改\msvc2010\mkspecs\win32-msvc2010\qmake.conf

【讨论】:

在.pro文件中,添加DEFINES *= _AFXDLL _MBCS

以上是关于从另一个 IDE (Qt Creator) 为 MSVC 编译器设置字符集的主要内容,如果未能解决你的问题,请参考以下文章

无法在发布模式下编译的 ide 之外运行 qt-creator 可执行文件

Qt Creator的下载

IDE的使用:代码快速浏览(Qt Creator篇)

Qt Creator 中的 C++11 IDE 支持? [复制]

Qt Creator IDE 中的自定义字体

我可以使用 Qt Creator 创建控制台应用程序吗?