如何使 c++ 代码既可用于 Qt 项目(QTL 风格)也可用于 C++ 项目(STL 风格)

Posted

技术标签:

【中文标题】如何使 c++ 代码既可用于 Qt 项目(QTL 风格)也可用于 C++ 项目(STL 风格)【英文标题】:How to make a c++ code can be used in both Qt project (QTL style) and C++ project (STL style) 【发布时间】:2016-04-30 02:31:10 【问题描述】:

有没有办法将C++(STL)代码转换为QT(QTL)?

我有一个使用 STL(字符串、向量、iostream、fstream)编写的代码和 我想将它添加到我的 Qt 项目中(使用时 QString、QVector、...)。 我理想的方法是通过添加一些定义使其与 QTL-STL 兼容 在.h 文件中,如下所示

// STL to QTL
#ifdef STL_CPP
    #include <string>
    #include<vector>
#else // QTL
    #include <QString>
    #define string QString
    #include <QVector>
    #define vector QVector
#endif

有没有什么现成的工作可以在没有的情况下转换一些最常用的STL代码 修改源代码?

请注意,我不想将 std 数据类型转换为 qt 数据类型,我想要的是 制作代码可以在 Qt 项目(ifndef STL_CPP)和 C++ 项目(ifdef STL_CPP)中使用。

【问题讨论】:

也许你应该展示一个实际代码的小例子。我想了解为什么 QVector::fromStdVector(const std::vector&lt;T&gt; &amp;vector)QString::fromStdString(const std::string &amp;str) 不能解决您的问题。 【参考方案1】:

使用宏替换将 STL 风格的代码转换为 QTL 风格的代码是危险的 并可能导致许多意外错误。

为避免这种情况,您可以在 QT 代码中使用 STL,并在与 Qt 框架交互时进行转换(以性能为代价),

将STL数据类型转换为QTL数据类型非常简单,就像drescherjm提到的QVector::fromStdVector(const std::vector&lt;T&gt; &amp;vector)QString::fromStdString(const std::string &amp;str)一样

【讨论】:

以上是关于如何使 c++ 代码既可用于 Qt 项目(QTL 风格)也可用于 C++ 项目(STL 风格)的主要内容,如果未能解决你的问题,请参考以下文章

QT开发(二十五)——QT模板库

QT & C++:传递 'const QString' 丢弃限定符

如何使用 Qt Creator 将 C++ 头文件添加到 Qt 项目

C++笔记-二维棋盘数组转邻接表(使用QTL)

桌面会飞的鸟Qt C++小项目

桌面会飞的鸟Qt C++小项目