我在一个正在研究图形和GUI组件的软件系统中广泛使用Qt。但是,对于大多数内部算法和数据处理,Qt起着较小的作用。
我经常会遇到从std :: string转换为QString的需要,反之亦然。我倾向于尽可能多地使用std :: string,并在需要将字符串传递给Qt类时使用QString ,就像那些与文件系统一样的类。
正如我今天早上编程的那样,让我觉得在我的代码中散布std :: string和QString可能是一个糟糕的设计。我应该完全切换到QString吗?还有其他人遇到过这种设计选择吗?
Qt提供了很多与STL相同的功能,但由于Qt标准化程度较低且稳定,我仍然犹豫不决。
答案 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工具包,这将更容易。