2011-11-06 101 views
7

更多的定制和实践问题,但它被认为是糟糕的形式,或高度不可取(选择你的解释不好)混合使用Qt库类型和类似的标准C++类型在一个程序中?Qt - 混合Qt和std :: C++类型

例如,坚持只使用QStrings用于字符串使用还是人们经常在源文件中混合使用QString和std :: string类型?

我已经继承了一些代码,包括在一个文件中使用QString和std :: string,并且想知道是否将所有内容都转换为一个或另一个。

回答

7

我认为这真的归结为“这取决于你在做什么”。当然,更容易保持只有一种类型。然而,有时您需要传递std :: strings或传递QStrings,并且不进行转换可能会更好地提高性能。

另请注意,QStrings与std:strings不同。因此,在它们之间进行转换时(或选择仅使用某种类型)请记住这一点。

3

一般来说,我更喜欢使用QString超过std::string和Qt容器(如QList,...)在std容器中的代码,是紧耦合到Qt框架,反正没有它,就没有意义。在所有其他组件(如辅助库等)中,为了灵活性,我更喜欢使用标准的C++方式。

但我认为这是更主观的决定,因为类型通常很容易相互转换(而Qt容器也提供标准的一致性迭代器)。虽然在Qt高度集中的代码中,Qt容器可能会更好,尤其是与Qt的元对象和类型系统一起使用。

1

我想这是由你来决定的。不管怎么说,在两者之间进行转换需要一个字符串的副本,所以如果两者都需要转换,那么它的性能不好:例如QString::fromStdStringQString::fromStdWString。如果你使用Qt,我想你可能不仅仅使用QString,在这种情况下,大多数Qt类的方法都要求你提供QString。所以,写作可能会对性能造成不利影响。

同时考虑到std :: string从实现到实现略有不同,std :: string copy-on-write可能会显示不同的性能。

+0

您的链接已损坏。 –

3

QStrings和C++字符串解决了不同的问题 - 主要区别在于QStrings明确地处理locales/encodings,而std :: strings不处理。

因此,对用户输入的所有数据以及要显示给用户的所有字符串使用QStrings,否则可能会丢失编码转换中的信息和/或使将来国际化应用程序变得更加困难。

对于任何我只需要char *等价物的地方,例如保持数据从地区/编码不适用的数据库中读取,我使用std :: strings,因为它们非Qt库更容易使用,并且数据不会通过任何编码转换。 但是,你必须明确地将它们添加到qt类型系统中,以便能够在信号/插槽参数中使用它们,一旦知道如何,这很容易。

但最后它是一个判断调用 - 只是为了让你的代码库更容易被新手访问,如果你使用的是非QtCore,那么在任何地方使用QString或者可能只是std :: string都可能更好-gui应用程序

5

检查此blog post比较STL与QTL和std::stringQString

我的2美分

这真的取决于你在做什么。一般来说,当我编码Qt是不必要的东西(例如库)时,我总是使用STL。另一方面,如果我正在为GUI应用程序编写代码,我倾向于使用QTLQString而不是STLstd::string。如果我想将此代码与使用STL编写的库集成在一起,我提供了过载的函数,可将其从STL转换为QTLQStringstd::string

QStrings是必须的如果您想本地化您的应用程序,因为使用tr()QLinguist使它变得非常简单。