转义符

feng199 2014-11-30 05:43:24
QPushButton *qb1 = new QPushButton("abc",this);
qb1->setText("退出");//这里退出要加哪个转换符号
...全文
311 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
feng199 2014-12-03
  • 打赏
  • 举报
回复
非常感谢大家的赐教。继续学习中
dbzhang800 2014-12-02
  • 打赏
  • 举报
回复
引用 8 楼 feng199 的回复:
看过了,就是想找更捷径的方法,省得每次有中文都要多打几个字
???
feng199 2014-12-02
  • 打赏
  • 举报
回复
看过了,就是想找更捷径的方法,省得每次有中文都要多打几个字
dbzhang800 2014-12-02
  • 打赏
  • 举报
回复
引用 14 楼 Kenier 的回复:
[quote=引用 13 楼 dbzhang800 的回复:] 1. 一个很简单的问题,往往很难几乎话说清楚。对 Qt4 和 GCC 来说,默认情况下,它的执行字符集 可以认为和源码字符集一样,也就是说,setCodecForCStrings("utf-8") 还是 setCodecForCStrings("gtk"),还要取决于 用户 的源码字符集 2. 不好意思,没注意到Qt文档组何时加上的这个表述。移除这个东西的初衷是
引用
Remove custom text codec for C strings. This setting is extremely harmful, as code cannot know whether or not to expect it. It also made the behaviour of QString::fromAscii and ::toAscii unintuitive, and caused a lot of people to make mistakes with it.
https://codereview.qt-project.org/#/c/14626/
一般情况下应该从默认配置上考虑问题,如果一个人已经修改了gcc的-finput-charset,那他就应该有处理这个问题的能力。[/quote] 我说的就是默认情况:在不修改 input-charset 和 exec-charset 的情况下。
dbzhang800 2014-12-02
  • 打赏
  • 举报
回复
引用 6 楼 feng199 的回复:
其实用QStringLiteral 就可以,测试几个,还未发现乱码,感觉每次要打中文,要多打几个字母,不太好。 版本是 QT5.3.2(MSVC 2010,32BIT),只有一个函数 QTextCodec::setCodecForLocale(),您说不能用。 用你们说的设置编码,我都还没成功过。
看看这个吧, http://www.qtcn.org/bbs/read-htm-tid-54663.html 另外,那几个setCodecForXXXX 不是不能用,是因为很多人都在乱用(或者乱试)。网上随便一搜,几乎99.99% 的用法都是错误的。 归根到底,搞不清楚C++的 执行字符集 和 源码字符集,就搞不定Qt中的中文问题。而原本属于C++书中的 这两个字符集的解释,C++的教材中却几乎没有任何涉及。
feng199 2014-12-02
  • 打赏
  • 举报
回复
其实用QStringLiteral 就可以,测试几个,还未发现乱码,感觉每次要打中文,要多打几个字母,不太好。 版本是 QT5.3.2(MSVC 2010,32BIT),只有一个函数 QTextCodec::setCodecForLocale(),您说不能用。 用你们说的设置编码,我都还没成功过。
astro_lee 2014-12-02
  • 打赏
  • 举报
回复
引用 13 楼 dbzhang800 的回复:
1. 一个很简单的问题,往往很难几乎话说清楚。对 Qt4 和 GCC 来说,默认情况下,它的执行字符集 可以认为和源码字符集一样,也就是说,setCodecForCStrings("utf-8") 还是 setCodecForCStrings("gtk"),还要取决于 用户 的源码字符集 2. 不好意思,没注意到Qt文档组何时加上的这个表述。移除这个东西的初衷是
引用
Remove custom text codec for C strings. This setting is extremely harmful, as code cannot know whether or not to expect it. It also made the behaviour of QString::fromAscii and ::toAscii unintuitive, and caused a lot of people to make mistakes with it.
https://codereview.qt-project.org/#/c/14626/
一般情况下应该从默认配置上考虑问题,如果一个人已经修改了gcc的-finput-charset,那他就应该有处理这个问题的能力。
dbzhang800 2014-12-02
  • 打赏
  • 举报
回复
1. 一个很简单的问题,往往很难几乎话说清楚。对 Qt4 和 GCC 来说,默认情况下,它的执行字符集 可以认为和源码字符集一样,也就是说,setCodecForCStrings("utf-8") 还是 setCodecForCStrings("gtk"),还要取决于 用户 的源码字符集 2. 不好意思,没注意到Qt文档组何时加上的这个表述。移除这个东西的初衷是
引用
Remove custom text codec for C strings. This setting is extremely harmful, as code cannot know whether or not to expect it. It also made the behaviour of QString::fromAscii and ::toAscii unintuitive, and caused a lot of people to make mistakes with it.
https://codereview.qt-project.org/#/c/14626/
astro_lee 2014-12-02
  • 打赏
  • 举报
回复
引用 11 楼 dbzhang800 的回复:
[quote=引用 10 楼 Kenier 的回复:]
Qt4把字面字符串常量传给QString的构造函数时,使用的是QString::fromAscii,QString::fromAscii实际使用QTextCodec::codecForCStrings来解析,Qt4中QTextCodec::codecForCStrings默认为utf-8。在gcc中,运行字符集默认为utf-8,所以用gcc构建程序时中文可以直接QString("中文"),但是用MSVC时,运行字符集默认为ANSI(即GBK),所以只需要调用QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());即可。

Qt5中因为性能方面的考虑去掉了QString::fromAscii、QTextCodec::codecForCStrings和QTextCodec::setCodecForCStrings,把字面字符串常量传给QString的构造函数时,使用的是QString::fromUtf8,用gcc没问题。MSVC需要用QString::fromLocal8Bit("中文")或者用QStringLiteral("中文")产生一个编译时的QString。


首先:Qt4,codecForCStrings() 默认不是UTF8,你后面Qt4的论断也有问题。

其次:Qt5,去掉那些东西,不是性能方面的原因。另外,MSVC2008/MSVC2010/MSVC2013 支持使用utf8 作为执行字符集。但 MSVC2005/MSVC2012 不支持。[/quote]
我很抱歉对QTextCodec::codecForCStrings的默认值做了假设,那我修正一下,Qt4在gcc下用QString(const char*)中文需要先QTextCodec::setCodecForCStrings("utf-8");或QString::fromUtf8("中文");

至于Qt5为何移除codecForCStrings可以参考这张图片:


另外我并没有说MSVC不支持utf-8运行字符集,就2010来说,需要安装sp1,然后需要#pragma execution_character_set("utf-8")这条预处理指令。
dbzhang800 2014-12-02
  • 打赏
  • 举报
回复
引用 10 楼 Kenier 的回复:
Qt4把字面字符串常量传给QString的构造函数时,使用的是QString::fromAscii,QString::fromAscii实际使用QTextCodec::codecForCStrings来解析,Qt4中QTextCodec::codecForCStrings默认为utf-8。在gcc中,运行字符集默认为utf-8,所以用gcc构建程序时中文可以直接QString("中文"),但是用MSVC时,运行字符集默认为ANSI(即GBK),所以只需要调用QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());即可。 Qt5中因为性能方面的考虑去掉了QString::fromAscii、QTextCodec::codecForCStrings和QTextCodec::setCodecForCStrings,把字面字符串常量传给QString的构造函数时,使用的是QString::fromUtf8,用gcc没问题。MSVC需要用QString::fromLocal8Bit("中文")或者用QStringLiteral("中文")产生一个编译时的QString。
首先:Qt4,codecForCStrings() 默认不是UTF8,你后面Qt4的论断也有问题。 其次:Qt5,去掉那些东西,不是性能方面的原因。另外,MSVC2008/MSVC2010/MSVC2013 支持使用utf8 作为执行字符集。但 MSVC2005/MSVC2012 不支持。
astro_lee 2014-12-02
  • 打赏
  • 举报
回复
Qt4把字面字符串常量传给QString的构造函数时,使用的是QString::fromAscii,QString::fromAscii实际使用QTextCodec::codecForCStrings来解析,Qt4中QTextCodec::codecForCStrings默认为utf-8。在gcc中,运行字符集默认为utf-8,所以用gcc构建程序时中文可以直接QString("中文"),但是用MSVC时,运行字符集默认为ANSI(即GBK),所以只需要调用QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());即可。 Qt5中因为性能方面的考虑去掉了QString::fromAscii、QTextCodec::codecForCStrings和QTextCodec::setCodecForCStrings,把字面字符串常量传给QString的构造函数时,使用的是QString::fromUtf8,用gcc没问题。MSVC需要用QString::fromLocal8Bit("中文")或者用QStringLiteral("中文")产生一个编译时的QString。
dbzhang800 2014-12-01
  • 打赏
  • 举报
回复
引用 4 楼 feng199 的回复:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK")); 这句报错啊,怎么找不到函数setCodecForCStrings,错误信息如下: error: C2039: “setCodecForCStrings”: 不是“QTextCodec”的成员
可能你用的是Qt5, Qt5比Qt4简单,所以一个setCodecForXXX都不需要。 但是C++依然会让人头疼,特别是MSVC这个编译器,对中文的支持简直一塌糊涂。
dbzhang800 2014-12-01
  • 打赏
  • 举报
回复
引用 2 楼 michael2988 的回复:
	// 解决中文乱码
	QTextCodec *codec = QTextCodec::codecForLocale();
	QTextCodec::setCodecForTr(codec);
	QTextCodec::setCodecForLocale(codec);
	QTextCodec::setCodecForCStrings(codec);
这3行setCodecForXXXX 隐含了很多错误。永远不要这3行代码一块用,非要用的话,最后一个setCodecForCStrings()代码足够了。 另外:永远不要用QTextCodec::codecForLocale() 来设置其他setCodecForXXXX编码,直接用GBK或UTF8 或其他
michael2988 2014-12-01
  • 打赏
  • 举报
回复
	// 解决中文乱码
	QTextCodec *codec = QTextCodec::codecForLocale();
	QTextCodec::setCodecForTr(codec);
	QTextCodec::setCodecForLocale(codec);
	QTextCodec::setCodecForCStrings(codec);
feng199 2014-12-01
  • 打赏
  • 举报
回复
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK")); 这句报错啊,怎么找不到函数setCodecForCStrings,错误信息如下: error: C2039: “setCodecForCStrings”: 不是“QTextCodec”的成员
feng199 2014-12-01
  • 打赏
  • 举报
回复
搞清楚了,不是转义符的问题,而是文件编码问题。

16,202

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧