所以我有一个自定义类Foo,它已经在类定义的末尾使用Q_DECLARE_METATYPE(Foo)
宏注册为元类型。
我可以在列表中设置项,检查是否可以Convert,但当我试图真正使Foo类型的项在编译时失败。
使用从QModelIndex &index
:传入的QVariant
Foo item(index.data(Qt::DisplayRole).value<Foo>())
由于以下错误而失败:
no matching function for call to 'namespace::Foo::Foo(namespace::Foo)'
In instantiation of 'T qvariant_cast(const Foo&) [with T = namesapce::Foo]':
required from 'T QVariant::value() const [with T = namespace::Foo]'
no matching function for call to 'namespace::Foo::Foo(const namespace::Foo &)'
no matching function for call to 'namespace::Foo::Foo(const namespace::Foo&)'
no matching function for call to 'namespace::Foo::Foo(const namespace::Foo)'
In member function 'T QVariant::value() const [with T = namespace::Foo]'
全部来自文件qvariation.h
我在这里做错了什么?我的类有以下构造函数:
Foo::Foo(const Foo &)
Foo::Foo()
标题如下:
namespace a {
namespace b {
class Foo {
explicit Foo();
explicit Foo(const Foo &a);
...
};
} // b
} // a
Q_DECLARE_METATYPE(a::b::Foo)
正如Dan Milburn所建议的,删除explicit
关键字解决了问题。在值调用中似乎发生了隐式转换,因此只有显式构造函数阻止了这种情况的发生。