Qt -混合Qt和std:: c++类型
Qt - mixing Qt and std:: C++ types
更多的是一个自定义和实践问题,但是在一个程序中混合使用Qt库类型和类似的标准c++类型是否被认为是糟糕的形式,或者是非常不可取的(选择您对坏的解释)?
例如,坚持只使用QString作为字符串使用是非常明智的,还是人们经常在源文件中混合使用QString和std::string类型?
我继承了一些代码,包括在一个文件中使用QString和std::string,我想知道是否将所有内容转换为一个或另一个。
我认为这真的归结为"这取决于你在做什么。"当然,将事物仅保留为一种类型更容易。然而,有时可能需要传递std::string或传递qstring,不进行转换可能会更好地提高性能。
还要记住,qstring与std:string不一样。因此,在它们之间进行转换时(或选择仅使用特定类型)请记住这一点。
查看这篇比较STL
与QTL和std::string
与QString
的博客文章。
My two cents
这真的取决于你在做什么。一般来说,当我在编码Qt
不需要的东西时(例如库),我总是使用STL
。另一方面,如果我正在为GUI应用程序编写代码,我更喜欢使用QTL
和QString
,而不是STL
和std::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可能会显示不同的性能。
- 使用QJsEngine在Qt中注册自定义类型
- 在Qt中注册自定义元类型的别名类型
- Qt/SQL - 从 QSqlQuery exec Stored Procedure 获取列类型和名称?
- QT如何检查表格小部件类型
- Qt 无法对类型"uint8_t"的参数进行排队,即使使用 qRegisterMetaType 也是如此
- Qt:无法对类型为"QProcess::P rocessError"的参数进行排队 - QProcess::P rocessError(FailedToStart)
- QT QT QBYTEARRAY无符号数据类型
- Qt 模型拖放 - 无法保存类型 QJsonValue
- 编译错误 QT - 无法从类型强制转换
- QT:错误 ["*"令牌之前的预期")",并且主窗口未命名类型]
- Qt QGraphicsSceneMouseEvent 访问不完整类型
- Qt - 在没有正则表达式的情况下,将 QString 拆分为几种类型的空格
- typedef 中的自定义类型为 Qt MetaType
- Qt C++ - 创建 QList<Myclass> - 不是参数 'T 的有效模板类型参数
- QT类型作为函数参数
- QML/real和C++/float之间的Qt类型错误
- Qt类型的标准文本表示是什么?
- QT/C++类型的异常过载功能情况
- 如何使用自定义Qt c++类型与QML插槽
- 我需要使用什么Qt类型来传递lambda作为函数参数