自定义类型为struct SP104{ BYTE addr0; BYTE addr1; BYTE addr2; };和struct DP104{ BYTE addr0; BYTE addr1; BYTE addr2; QStrig data; }; 泛型类中使用自定义类型,使用 QMetaType::type() 函数获取 自定义的类型,泛型类中根据不同的自定义类型,使用QMetaType::type,获取不同的数据打印不同的数据,思考一下。请 用qt5写一段代码,代码包含.h和.cpp。谢谢!
时间: 2024-02-13 12:07:30 浏览: 155
golang中struct和[]byte的相互转换示例
下面是一个使用自定义类型的泛型类的示例代码,包含.h和.cpp文件:
SP104.h
```cpp
#ifndef SP104_H
#define SP104_H
#include <QtCore>
struct SP104 {
quint8 addr0;
quint8 addr1;
quint8 addr2;
};
Q_DECLARE_METATYPE(SP104)
#endif // SP104_H
```
DP104.h
```cpp
#ifndef DP104_H
#define DP104_H
#include <QtCore>
struct DP104 {
quint8 addr0;
quint8 addr1;
quint8 addr2;
QString data;
};
Q_DECLARE_METATYPE(DP104)
#endif // DP104_H
```
GenericPrinter.h
```cpp
#ifndef GENERICPRINTER_H
#define GENERICPRINTER_H
#include <QtCore>
template<typename T>
class GenericPrinter
{
public:
static void print(const T& value) {
int type = qMetaTypeId<T>();
if (type == qMetaTypeId<SP104>()) {
const SP104& sp = static_cast<const SP104&>(value);
qDebug() << "SP104: " << sp.addr0 << ", " << sp.addr1 << ", " << sp.addr2;
} else if (type == qMetaTypeId<DP104>()) {
const DP104& dp = static_cast<const DP104&>(value);
qDebug() << "DP104: " << dp.addr0 << ", " << dp.addr1 << ", " << dp.addr2 << ", " << dp.data;
} else {
qDebug() << "Unknown type";
}
}
};
#endif // GENERICPRINTER_H
```
main.cpp
```cpp
#include <QtCore>
#include "SP104.h"
#include "DP104.h"
#include "GenericPrinter.h"
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
SP104 sp = {0x01, 0x02, 0x03};
DP104 dp = {0x04, 0x05, 0x06, "Hello, world!"};
GenericPrinter<SP104>::print(sp);
GenericPrinter<DP104>::print(dp);
return app.exec();
}
```
在这个示例中,我们使用Q_DECLARE_METATYPE宏声明了SP104和DP104类型为元类型,这样我们就可以使用qMetaTypeId函数获取它们的类型ID。在GenericPrinter类中,我们使用qMetaTypeId函数获取传递给print函数的值的类型ID,并根据类型ID打印不同的数据。在main函数中,我们创建了一个SP104类型的变量和一个DP104类型的变量,并将它们传递给GenericPrinter类的print函数进行打印。
阅读全文