如何使 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<T> &vector)
和 QString::fromStdString(const std::string &str)
不能解决您的问题。
【参考方案1】:
使用宏替换将 STL 风格的代码转换为 QTL 风格的代码是危险的 并可能导致许多意外错误。
为避免这种情况,您可以在 QT 代码中使用 STL,并在与 Qt 框架交互时进行转换(以性能为代价),
将STL数据类型转换为QTL数据类型非常简单,就像drescherjm提到的QVector::fromStdVector(const std::vector<T> &vector)
和QString::fromStdString(const std::string &str)
一样
【讨论】:
以上是关于如何使 c++ 代码既可用于 Qt 项目(QTL 风格)也可用于 C++ 项目(STL 风格)的主要内容,如果未能解决你的问题,请参考以下文章
QT & C++:传递 'const QString' 丢弃限定符