C++ 交替使用std::string和QString

C++ 交替使用std::string和QString,c++,string,qt,stl,qstring,C++,String,Qt,Stl,Qstring,我在为图形和GUI组件开发的软件系统中广泛使用Qt。然而,对于大多数内部算法和数据处理,Qt所起的作用较小 我经常会遇到从std::string转换为QString或从visa转换为std::string的需要。我倾向于尽可能多地使用std::string,当我需要将字符串传递给Qt类(如与文件系统一起工作的类)时,只使用QString 当我今天早上编程时,我突然想到,在我的代码中同时使用std::string和QString可能是一种糟糕的设计。我应该完全切换到QString吗?还有其他人遇到

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

我经常会遇到从std::string转换为QString或从visa转换为std::string的需要。我倾向于尽可能多地使用std::string,当我需要将字符串传递给Qt类(如与文件系统一起工作的类)时,只使用QString

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


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

是的,我以前有过这种情况。我开发的程序始终使用Qt,但我必须将它连接到一个库,该库需要
std::string
QStult的好处是它明确地使用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(好极了!)。

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

QString
有一个方法
toStdString()
。请参见此处:。要从
std::string
创建
QString
,您可以使用以下构造函数:@yasourer:yes,但它们取决于全局设置的字符编码。这些函数来自一个库,该库从另一个库获得
std::string
,始终包含UTF-8。您可以通过传递长度来改进这些函数,使其即使字符串包含嵌入式NUL也能正常工作-
return QString::fromUtf8(s.c_str(),s.size())
auto buf=s.toUtf8();返回std::string(buf.data(),buf.size())