我已定义QT_NO_CAST_FROM_ASCII
,因此我无法从char*
投射到QString
。以前我一直在使用:QLatin1String
但我刚刚注意到QString::fromStdString
,我不想使用此功能,因为QLatin1String
比QString::fromLatin1
更受欢迎。
是否有人知道std::string
的{{1}}的Qt对象?{/ 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
也就是说,我找不到QLatin1String
和JKSH asserts that there isn't one的包装器。所以我相信,从Qt 5.2开始,首选的解决方案是使用QLatin1String
包装器
(对于那些对多语言软件感兴趣的人,Qt的QString::fromLaint1
和char*
都希望QString::fromStdString
处于正确的unicode状态; QString::fromUtf8
实际上使用{{1}}引擎盖转换为适当的unicode。)