将std::string转换为QString的包装器
Wrapper for converting std::string to QString?
我已经定义了QT_NO_CAST_FROM_ASCII
,所以我不能从char*
转换到QString
。以前我一直在使用:QLatin1String
但我只是注意到QString::fromStdString
,我不喜欢使用这个,因为QLatin1String
比QString::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的QLatin1String
和QString::fromLaint1
都期望char*
是合适的unicode;QString::fromStdString
实际上在底层使用QString::fromUtf8
来转换为正确的unicode)
相关文章:
- 将 Qvector<uint8_t> 转换为 QString
- 如何在c++17中制作一个模板包装器/装饰器
- std::vector的包装器,使数组的结构看起来像结构的数组
- 如何在c++迭代器类型中包装std::chrono
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 用pybind11包装C++抽象类时出错
- 为左值和右值的包装器实现C++范围
- C结构,其指针将被包装在unique_ptr中
- 如何包装第三方DLL在R中使用
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 将 N-arg 函数包装到另一个函数中
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 包装一个对象并假装它是一个 int
- 使用 Python Extension API 包装复杂C++类
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 包装C++类时不完整的类型 GLFWwindow
- 将函数包装器转换为 std::function
- C++函数包装器来捕获某些信号
- 将std::string转换为QString的包装器