QVariant.value <t>()导致问题</t>

时间:2013-02-20 16:58:45

标签: c++ qt qvariant

所以我有一个自定义类Foo,它已经使用类定义末尾的Q_DECLARE_METATYPE(Foo)宏注册为元类型。

我可以在列表中设置项目,检查是否canConvert,但是当我尝试实际创建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]'

全部来自文件qvariant.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)

1 个答案:

答案 0 :(得分:0)

正如Dan Milburn建议的那样,删除explicit个关键字可以解决问题。看起来在值调用中发生了隐式转换,因此只有显式构造函数阻止了这一点。