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