9

我在我正在为图形和 GUI 组件开发的软件系统中广泛使用 Qt。然而,对于大多数内部算法和数据处理,Qt 所起的作用较小。

我经常会遇到从 std::string 转换为 QString 的需要,反之亦然。我的倾向是尽可能多地使用 std::string 并且当我需要将字符串传递给 Qt 类(例如那些与文件系统一起使用的类)时才使用 QString。

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

Qt 提供了许多与 STL 相同的功能,但我仍然犹豫是否要完全切换,因为 Qt 的标准化和稳定性较低。

4

2 回答 2

9

是的,我以前也遇到过这种情况。我工作的程序自始至终都使用 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());
}

因为库产生std::string的包含 UTF-8。

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

于 2011-05-26T12:17:17.077 回答
6

我会说std::string在您的程序核心中使用,并将它们转换为QString您在 GUI 部分工作时。如果你想改变你的 GUI 工具包,那会更容易。

于 2011-05-26T12:27:51.013 回答