2013-02-20 224 views
0

所以我有一個自定義類Foo,它已經在類定義的末尾使用宏Q_DECLARE_METATYPE(Foo)註冊爲元類型。QVariant.value <T>()導致問題

我可以設置列表中的項目,請檢查是否canConvert,但是當我嘗試實際製作的Foo類型的東西的項目不能在編譯時。

使用的QVariant從QModelIndex &index傳遞:

Foo item(index.data(Qt::DisplayRole).value<Foo>()) 

失敗,出現以下錯誤(S):

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

顯示你的頭,你在那裏放置Q_DECLARE_METATYPE(美孚) – ixSci 2013-02-20 17:06:11

+0

它最初的QVariant的一個子類,但也不能工作。 – ElCraneo 2013-02-20 18:09:06

+2

這可能是對那些導致問題的構造函數使用'explicit'。此外,只是爲了確保,你怎麼叫'qRegisterMetaType ():'? – 2013-02-20 18:45:11

回答

0

正如丹米爾本建議,去掉explicit關鍵字解決了這個問題。它看起來在值調用中發生了隱式轉換,因此只有顯式構造函數阻止了這種轉換。