2014-05-13 51 views
-1

我有QT_NO_CAST_FROM_ASCII定义,所以我不能从char*转换为QString。以前我一直在使用:QLatin1String
但我只注意到QString::fromStdString,我不喜欢用这个,因为QLatin1StringQString::fromLatin1更受欢迎。将std :: string转换为QString的包装器?

有没有人知道Qt对象为std::string s,它的工作方式如同QLatin1String

+0

'QLatin1String'只是const char *'c-string的封装。所以我不知道你想要什么。你想转换成'QString'吗?或者你只是'QLatin1String'。 –

+0

@MarekR''QLatin1String'是'char *',因为'?'是'std :: string'。我想知道'?'是什么。 –

+1

没有与'?'匹配的Qt对象。将std :: string转换为QString的官方方法是'QString :: fromStdString()'。 “QLatin1String”比'QString :: fromLatin1'更受欢迎是什么意思? – JKSH

回答

1

对于那些谁使用Qt与QT_NO_CAST_FROM_ASCII启用char* S和std::strings不能分配给QString或转换为QString

这不会启用QT_NO_CAST_FROM_ASCII编译:

QString foo("Hello World"); 

你可以做到这一点,但Qt frowns upon it因为它创造了“临时QString对象,使字符数据的深层复制”:

QString foo(QString::fromLatin1("Hello World")); 

相反,您必须使用:

QString foo(QLatin1String("Hello World")); 

这是一个有点令人沮丧,如果你需要从std::string得到QString,因为你必须现在拨打:

QString foo(QLatin1String(helloWorld.c_str())); 

有一个直接转换,但不与Qt的建议包装:

QString foo(QString::fromStdString(helloWorld)); 

也就是说,我一直无法找到std::stringJKSHasserts that there isn't one的包装。所以我认为,从Qt 5.2开始,首选的解决方案是使用QLatin1String包装。



(顺便为那些有兴趣在多语种软件,Qt的QLatin1StringQString::fromLaint1都期待char*将在适当的Unicode; QString::fromStdString实际使用QString::fromUtf8引擎盖下转换为适当的Unicode)。