c++ - 交替使用 std::string 和 QString

标签 c++ string qt stl qstring

我在用于图形和 GUI 组件的软件系统中广泛使用 Qt。然而,对于大多数内部算法和数据处理,Qt 扮演的角色较小。

我经常遇到需要将 std::string 转换为 QString 或相反的情况。我的倾向是尽可能多地使用 std::string 并在我需要将字符串传递给 Qt 类(例如那些与文件系统一起使用的类)时使用 QString。

今天早上我在编程时,突然想到在我的代码中散布 std::string 和 QString 可能是一个糟糕的设计。我应该完全切换到 QString 吗?还有其他人遇到过这种设计选择吗?

Qt 提供了很多与 STL 相同的功能,但我仍然犹豫要不要完全切换,因为 Qt 不够标准化和稳定。

最佳答案

是的,我以前遇到过这种情况。我开发的程序始终使用 Qt,但我必须将它连接到需要 std::string 的库。 QString 的好处是它明确使用 Unicode,而 C++ 标准库不保证编码。

解决方案是在这个库的边界转换

QString toQString(std::string const &s)
{
    return QString::fromUtf8(s.c_str());
}

std::string fromQString(QString const &s)
{
    return std::string(s.toUtf8().data());
}

因为库生成了包含 UTF-8 的 std::string

您似乎想要的恰恰相反:始终使用 std::string 并在 Qt 边界进行转换。这似乎完全没问题;它比总是使用 QString 需要更多的工作,但是当你需要一个非 QString 接受的库时,你将不得不付出努力,而你的非GUI 组件不依赖于 Qt(欢呼!)。

关于c++ - 交替使用 std::string 和 QString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6138068/

相关文章:

c++ - 使用统一初始化语法的初始化列表的类内成员初始化?

C printf 数组并获取 open_stackdumpfile 错误

c++ - QDataStream 无法序列化数据

c++ - 使用 Qt 挂载网络驱动器

c++ - 在 C、C++ 中检测 Windows 或 Linux

c++ - 派生类的模板特化问题

c++ - 使用具有继承性的构造函数基类和成员初始值设定项列表

java - Kotlin 解构 when/if 语句

c++ - 将字符串指针传递给 C++ 中的结构

c++ - opengl中如何用鼠标点击获取帧缓冲区中绘制图形的像素信息