不知道大家是否曾经遇到过windows环境编译器vs2019下,源码中有汉字字符串常量时,编译报错:error: C2001: 常量中有换行符,源码类似如下:
QStringList titles;
titles<< "名称";
Qt6 + vs2019 64bit编译器:一般缺省已经处理好这种情况,至于为什么没有去研究。总之,Qt6+vs2019 64bit不会报错。
但是在Qt5.15及以下版本就会报错。网上有很多似是而非的解决方法,其实都治标不治本。解决方案其实很简单,去看看微软相关的文档就明白了。https://docs.microsoft.com/zh-cn/cpp/build/reference/source-charset-set-source-character-set?view=msvc-160
所以,只要在.pro文档中添加如下设置就能解决问题:
msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
顺带说一下,Qt6已经没有QTextCodec了,如果需要用到相关的多字节文本编解码请参看
QStringConverter。官方有使用说明,例子如下:
QByteArray encodedString = "...";
auto toUtf16 = QStringDecoder(QStringDecoder::Utf8);
QString string = toUtf16(encodedString);
QString string = "...";
auto fromUtf16 = QStringEncoder(QStringEncoder::Utf8);
QByteArray encodedString = fromUtf16(encodedString);