• 6541阅读
  • 6回复

[提问]请教由char向QString转化问题 [复制链接]

上一主题 下一主题
离线addfourliu
 
只看楼主 倒序阅读 楼主  发表于: 2011-10-30
小弟在程序中写了这么一句话:const QString sPluginVersion = "2.3.0.20111030";
但是程序报错说:error C2440: 'initializing' : cannot convert from 'const char [15]' to QString'
如果我写成const QString sPluginVersion = tr("2.3.0.20111025");就可以顺利通过。。。
不明白为啥这样,大家有没有更好的解决方法,谢谢啦。。。
补充:如果写成这样呢?const QString sPluginVersion = QString("2.3.0.20111030");
还是报error C2440: 'initializing' : cannot convert from 'const char [15]' to QString'
离线dbzhang800

只看该作者 1楼 发表于: 2011-10-30
我说一下思考问题的方法:

首先:我认为不会出现这个问题,但是我需要证据,但是你没有提供。我只能猜。

1。C2440 应该是 MSVC 报的错误,所以我需要一个安装有MSVC+Qt
的Windows。还好,我虚拟机中有MSVC2010和Qt4.8

2。我需要最短的Qt代码,恩,几行足够

  1. #include <QtCore/QString>
  2. int main()
  3. {
  4.     const QString sPluginVersion = "2.3.0.20111030";
  5.     return 0;
  6. }

3。我用默认选项去编译它

C:\Test> cl hello.cpp /IC:\Qt\4.8.0\include /link /LIBPATH:C:\Qt\4.8.0\lib QtCore4.lib
用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器 16.00.30319.01 版
版权所有(C) Microsoft Corporation。保留所有权利。
hello.cpp
Microsoft (R) Incremental Linker Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.
/out:hello.exe
-LIBPATH:C:\Qt\4.8.0\lib
QtCore4.lib
hello.obj


恩,一切正常,没有任何问题

4。添加我怀疑的你使用的宏

C:\Test> cl hello.cpp /DQT_NO_CAST_FROM_ASCII  /IC:\Qt\4.8.0\include /link /LIBPATH:C:\Qt\4.8.0\lib QtCore4.lib
用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器 16.00.30319.01 版
版权所有(C) Microsoft Corporation。保留所有权利。

hello.cpp
hello.cpp(4) : error C2440: “初始化”: 无法从“const char [15]”转换为“QString

        无构造函数可以接受源类型,或构造函数重载决策不明确



恩,看来确实如此

离线zhy282289
只看该作者 2楼 发表于: 2011-10-30
回 1楼(dbzhang800) 的帖子
虽然我也觉得是加了这个宏.不过如果是LZ自己的小程序之类的不会自己加了也不知道的吧~
为什么我脸这么胖~
离线dbzhang800

只看该作者 3楼 发表于: 2011-10-30
Re:回 1楼(dbzhang800) 的帖子
引用第2楼zhy282289于2011-10-30 22:39发表的 回 1楼(dbzhang800) 的帖子 :
虽然我也觉得是加了这个宏.不过如果是LZ自己的小程序之类的不会自己加了也不知道的吧~

呵呵,这也是我想知道的。如果没有顾虑我也不会专门验证这个猜想了。但至少可以确定:这条语句常态下没有问题
离线addfourliu
只看该作者 4楼 发表于: 2011-10-31
回 1楼(dbzhang800) 的帖子
你说的是,因为程序是别人写的,里面的确有添加QT_NO_CAST_FROM_ASCII和QT_NO_CAST_TO_ASCII这两个宏,在帮助文档中解释说Disables automatic conversions from 8-bit strings (char *) to unicode QStrings,但是不清楚源程序添加这两个宏的意图,这个个宏作用是说char和QString不能自动转换,但是我们在什么时候会用到呢?谢谢啦
离线dbzhang800

只看该作者 5楼 发表于: 2011-10-31
Re:回 1楼(dbzhang800) 的帖子
引用第4楼addfourliu于2011-10-31 09:00发表的 回 1楼(dbzhang800) 的帖子 :
你说的是,因为程序是别人写的,里面的确有添加QT_NO_CAST_FROM_ASCII和QT_NO_CAST_TO_ASCII这两个宏,在帮助文档中解释说Disables automatic conversions from 8-bit strings (char *) to unicode QStrings,但是不清楚源程序添加这两个宏的意图,这个个宏作用是说char和QString不能自动转换,但是我们在什么时候会用到呢?谢谢啦

对于一个很严谨的、准备跨平台的工程(特别是库)来说,一般都会加这两个宏。

按理说,这两个宏对中日韩应该特别有用,可是国内的情况,实在太不乐观了,

很多人动不动就 QString a = "中文"; 这样用,完全不考虑这究竟在做什么。而且还使用 setCodecsFor* ,而不去考虑这意味着什么。

至于你的代码,标准写法是:

const QString sPluginVersion = QLatin1String("2.3.0.20111030");
离线addfourliu
只看该作者 6楼 发表于: 2011-10-31
回 5楼(dbzhang800) 的帖子
恩啊,谢谢你啦。。。
快速回复
限100 字节
 
上一个 下一个