QVariant自定义注册
时间: 2023-07-03 18:31:52 浏览: 55
在Qt中,我们可以通过Q_DECLARE_METATYPE宏和qRegisterMetaType函数实现自定义类型的注册和存储。这样,我们就可以将自定义类型存储到QVariant对象中了。
下面是一个自定义类型的例子:
```cpp
#include <QVariant>
#include <QDebug>
class MyClass {
public:
MyClass(int value) : m_value(value) {}
int value() const { return m_value; }
private:
int m_value;
};
Q_DECLARE_METATYPE(MyClass*)
int main()
{
qRegisterMetaType<MyClass*>();
MyClass* ptr = new MyClass(123);
QVariant var = QVariant::fromValue(ptr);
MyClass* p = var.value<MyClass*>();
qDebug() << p->value();
delete ptr;
return 0;
}
```
运行结果:
```
123
```
在这个例子中,我们定义了一个名为MyClass的类,并使用Q_DECLARE_METATYPE宏将MyClass*类型注册到Qt的元对象系统中。接着,使用qRegisterMetaType函数将MyClass*类型注册到Qt的元对象系统中,这样就可以将MyClass*类型存储到QVariant对象中了。可以使用 value() 方法获取QVariant对象中存储的指针类型,并通过指针访问MyClass对象的成员函数。需要注意的是,在释放ptr之前,不能销毁QVariant对象var,否则程序会崩溃。