gpt4 book ai didi

qt - Q_DECLARE_METATYPE 根本不起作用

转载 作者:行者123 更新时间:2023-12-04 00:35:20 32 4
gpt4 key购买 nike

我正在尝试在 QAbstractListModel 中使用自定义类,而 Q_DECLARE_METATYPE 根本不起作用!

为了测试问题出在哪里,我将代码简化如下:

#include <QMetaType>
#include <QVariant>
#include <QDebug>

typedef int x;
Q_DECLARE_METATYPE(x)

void main() {
QVariant v;
qDebug() << v.canConvert<x>();
}

并且输出仍然是错误的!

顺便说一句,我要实现的代码是这样的:
namespace ns{
class a {
public:
a(); //default constructor
a(const a&); //copy constructor
~a();
}
}
Q_DECALRE_METATYPE(ns::a);

当我尝试像这样重新实现 QAbstractListModel::data 时:
QList<ns::s> list;    //this is actually a member field of the custom model.
QVariant MyListModel::data(const QModelIndex& index, int role) const {
Q_UNUSED(role)
return list.at(index.row());
}

编译器将报告和错误,如:
cannot convert const ns::a to QVariant::Type

最佳答案

您的示例过于简化,因为文档非常清楚地指出传递给 Q_DECLARE_METATYPE 的类/结构必须具有默认构造函数、复制构造函数和公共(public)析构函数:http://qt-project.org/doc/qt-5.0/qtcore/qmetatype.html#Q_DECLARE_METATYPE

话虽如此,这是一个非常简单的示例,显示 Q_DECLARE_METATYPE 工作:

#include <QMetaType>
#include <QVariant>
#include <QDebug>

namespace MyNS {
class MyClass {
public:
MyClass() : value(0) { }
MyClass(int value) : value(value) { }
MyClass(const MyClass &other) { value = other.value; }
~MyClass() { }
int getValue() const { return value; }
private:
int value;
};
};

Q_DECLARE_METATYPE(MyNS::MyClass);

int main(int argc, char *argv[])
{
MyNS::MyClass m(15);
QVariant v = QVariant::fromValue(m);
qDebug() << v.canConvert<MyNS::MyClass>();
qDebug() << v.value<MyNS::MyClass>().getValue();
}

关于qt - Q_DECLARE_METATYPE 根本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19069758/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com