我有QT_NO_CAST_FROM_ASCII
定义,所以我不能从char*
转换为QString
。以前我一直在使用:QLatin1String
但我只注意到QString::fromStdString
,我不喜欢用这个,因为QLatin1String
比QString::fromLatin1
更受欢迎。将std :: string转换为QString的包装器?
有没有人知道Qt对象为std::string
s,它的工作方式如同QLatin1String
?
我有QT_NO_CAST_FROM_ASCII
定义,所以我不能从char*
转换为QString
。以前我一直在使用:QLatin1String
但我只注意到QString::fromStdString
,我不喜欢用这个,因为QLatin1String
比QString::fromLatin1
更受欢迎。将std :: string转换为QString的包装器?
有没有人知道Qt对象为std::string
s,它的工作方式如同QLatin1String
?
对于那些谁使用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::string
和JKSHasserts that there isn't one的包装。所以我认为,从Qt 5.2开始,首选的解决方案是使用QLatin1String
包装。
(顺便为那些有兴趣在多语种软件,Qt的QLatin1String
和QString::fromLaint1
都期待char*
将在适当的Unicode; QString::fromStdString
实际使用QString::fromUtf8
引擎盖下转换为适当的Unicode)。
'QLatin1String'只是const char *'c-string的封装。所以我不知道你想要什么。你想转换成'QString'吗?或者你只是'QLatin1String'。 –
@MarekR''QLatin1String'是'char *',因为'?'是'std :: string'。我想知道'?'是什么。 –
没有与'?'匹配的Qt对象。将std :: string转换为QString的官方方法是'QString :: fromStdString()'。 “QLatin1String”比'QString :: fromLatin1'更受欢迎是什么意思? – JKSH