Qt -混合Qt和std:: c++类型

Qt - mixing Qt and std:: C++ types

本文关键字:Qt 类型 c++ 混合 std      更新时间:2023-10-16

更多的是一个自定义和实践问题,但是在一个程序中混合使用Qt库类型和类似的标准c++类型是否被认为是糟糕的形式,或者是非常不可取的(选择您对坏的解释)?

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

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

我认为这真的归结为"这取决于你在做什么。"当然,将事物仅保留为一种类型更容易。然而,有时可能需要传递std::string或传递qstring,不进行转换可能会更好地提高性能。

还要记住,qstring与std:string不一样。因此,在它们之间进行转换时(或选择仅使用特定类型)请记住这一点。

查看这篇比较STL与QTL和std::stringQString的博客文章。

My two cents

这真的取决于你在做什么。一般来说,当我在编码Qt不需要的东西时(例如库),我总是使用STL。另一方面,如果我正在为GUI应用程序编写代码,我更喜欢使用QTLQString,而不是STLstd::string。如果我想将此代码与使用STL编写的库集成,则提供从STL转换为QTL和从QString转换为std::string的重载函数。

QStrings是必须的,如果你想本地化你的应用程序,因为使用tr()QLinguist使它非常容易。

qstring和c++字符串解决不同的问题——主要区别在于qstring显式地处理区域/编码,而std::string不这样做。

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

对于任何我只需要一个char*等效的东西,例如持有从数据库中读取的数据,其中区域设置/编码不适用,我使用std::字符串,因为它们更容易与非qt库一起使用,并且您的数据不会通过任何编码转换。但是,您必须显式地将它们添加到qt类型系统中,以便能够在信号/槽参数中使用它们,一旦您知道如何使用它们,这就很容易了。

但最后这是一个判断调用-只是为了让你的代码库更容易被新手访问,它可能是更好的只是使用QString无处不在,或者可能只是std::string无处不在,如果你在非gui应用程序中使用QtCore。

一般来说,我更喜欢在代码中使用QString而不是std::string和Qt容器(如QList,…)而不是std容器,这些容器与Qt框架紧密耦合,无论如何,没有它就没有意义。在所有其他组件(如辅助库等)中,为了灵活性,我更喜欢使用标准的c++方式。

但是我认为这更多的是一个主观的决定,因为类型通常很容易相互转换(Qt容器也提供标准一致性迭代器)。尽管在高度以Qt为中心的代码中,Qt容器可能工作得更好,特别是与Qt的元对象和类型系统一起。

我想该由你决定了。无论如何,考虑到两者之间的转换需要字符串的副本,所以如果使用两者都需要转换,那么就性能而言不是很好:读取例如QString::fromStdString和QString::fromStdWString。如果你正在使用Qt,我猜你可能不仅使用QString,而且在这种情况下,Qt类的大多数方法要求你提供QString的。因此,这可能对性能不利,而且写起来不舒服。

还要考虑到std::string在不同的实现中略有不同,并且std::string copy-on-write可能会显示不同的性能。