用于将std :: string转换为QString的包装器?

时间:2014-05-13 12:55:36

标签: c++ string qt qstring

我已定义QT_NO_CAST_FROM_ASCII,因此我无法从char*投射到QString。以前我一直在使用:QLatin1String
但我刚刚注意到QString::fromStdString,我不想使用此功能,因为QLatin1StringQString::fromLatin1更受欢迎。

是否有人知道std::string的{​​{1}}的Qt对象?{/ 1}}

1 个答案:

答案 0 :(得分:1)

对于那些使用QT_NO_CAST_FROM_ASCII启用char*并且std::strings并且QString使用Qt的用户,无法分配到QString或投放到QT_NO_CAST_FROM_ASCII

这将无法在启用QString foo( "Hello World" ); 的情况下进行编译:

QString

您可以执行此操作但Qt frowns upon it因为它会创建“临时QString foo( QString::fromLatin1( "Hello World" ) ); 个对象并制作字符数据的深层副本”:

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

相反,你必须使用:

QString

如果您需要从std::string获得QString foo( QLatin1String( helloWorld.c_str() ) ); ,那会更令人沮丧,因为您现在必须致电:

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

有一个直接转换,但不是Qt推荐的包装器:

std::string

也就是说,我找不到QLatin1StringJKSH asserts that there isn't one的包装器。所以我相信,从Qt 5.2开始,首选的解决方案是使用QLatin1String包装器


(对于那些对多语言软件感兴趣的人,Qt的QString::fromLaint1char*都希望QString::fromStdString处于正确的unicode状态; QString::fromUtf8实际上使用{{1}}引擎盖转换为适当的unicode。)