同时使用std :: string和QString

时间:2011-05-26 11:55:28

标签: c++ string qt stl qstring

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

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

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

Qt提供了很多与STL相同的功能,但由于Qt标准化程度较低且稳定,我仍然犹豫不决。

2 个答案:

答案 0 :(得分: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(欢呼!)。

答案 1 :(得分:6)

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