'QString::QString(const char*)' is qstring.h private的原因和解决

来源:互联网 发布:聚划算与淘宝的关系 编辑:程序博客网 时间:2024/05/18 00:37

在qt4对QString构造函数进行调用时,常用的方法有如下两种:

QString objInfo = QString(obj->metaObject()->className());

QString temp = QString("%1 %2").arg("Hello").arg("World");

这两种创建qt4的方法在qt4都是没有任何问题的,但是一旦在qt5上使用这两种方法创建QString对象,就会出现“ QString::QString(const char*) is qstring.h private ”的错误。

查看IDE的提醒和qstring.h的源码,会发现在qt5中,QString::QString(const char*)是属于私有函数


也就是说,在qt5里面,QString::QString(const char*)已经是被修改为了私有成员函数,无法直接调用以创建对象。

那么为什么会有这个问题呢?这还要从QString的编码格式说起。我们常用的utf-8的编码格式,不同的字符的byte长度可能是不一样的,而为了加快数据处理QString使用的是utf-16的编码,这个编码所有字符的byte长度都是一样的。

为了解决编码的问题,qstring,h提供了各种转码函数,大体格式都是“from+原本编码格式”的命名方式,例如 QString::QStringfromUtf8()函数。

最后,需要如何解决最初提到的那个问题呢?

C++常用的字符串类型有char*、string以及使用qt时用到的QString。

下面简单列出一个string类型转换为QString的方法:

string temp = "Hello world";QString result;result = result.fromUtf8(temp.c_str());


原创粉丝点击