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

Wrapper for converting std::string to QString?

本文关键字:包装 QString 转换 std string      更新时间:2023-10-16

我已经定义了QT_NO_CAST_FROM_ASCII,所以我不能从char*转换到QString。以前我一直在使用:QLatin1String
但我只是注意到QString::fromStdString,我不喜欢使用这个,因为QLatin1StringQString::fromLatin1更受欢迎。

有谁知道std::string的Qt对象像QLatin1String一样工作吗?

对于那些使用启用QT_NO_CAST_FROM_ASCII的Qt的人来说,char* s和std::strings不能分配给QString或强制转换为QString

启用QT_NO_CAST_FROM_ASCII将无法编译:

QString foo( "Hello World" );

你可以这样做,但Qt不赞成它,因为它创建了"临时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的包装器,JKSH断言没有。所以我相信,作为Qt 5.2首选的解决方案是使用QLatin1String包装。



(对于那些对多语言软件感兴趣的人来说,Qt的QLatin1StringQString::fromLaint1都期望char*是合适的unicode;QString::fromStdString实际上在底层使用QString::fromUtf8来转换为正确的unicode)