同时使用std :: string和QString

Ala*_*ing 9 c++ string qstring qt stl

我在一个正在研究图形和GUI组件的软件系统中广泛使用Qt.但是,对于大多数内部算法和数据处理,Qt起着较小的作用.

我经常会遇到从std :: string转换为QString的需要,反之亦然.我倾向于尽可能多地使用std :: string,并且只有当我需要将字符串传递给Qt类时才使用QString,就像那些使用文件系统的类一样.

正如我今天早上编程的那样,让我觉得在我的代码中散布std :: string和QString可能是一个糟糕的设计.我应该完全切换到QString吗?还有其他人遇到过这种设计选择吗?

Qt提供了许多与STL相同的功能,但由于Qt不太标准化和稳定,我仍然犹豫不决.

Fre*_*Foo 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());
}
Run Code Online (Sandbox Code Playgroud)

因为图书馆制作std::string的包含UTF-8.

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

  • `QString`有一个方法`toStdString()`.请参见此处:http://doc.trolltech.com/4.5/qstring.html#toStdString.要从`std :: string`创建一个`QString`,你可以使用这个构造函数:http://doc.trolltech.com/4.5/qstring.html#QString-7 (2认同)

tib*_*bur 6

我会说std::string在你的程序核心中使用,并QString在你正在处理GUI部分时将它们转换为.我想要更改GUI工具包,这将更容易.