2014-04-10 200 views
1

我有這個類,它註冊爲的QVariant使用qvariant_cast與自定義類型

class MyTimeLine 
{ 
public: 
    MyTimeLine(double kStart = 0, double kEnd = 1); 
    void paint(QPainter *painter, const QRect &rect, 
       const QPalette &palette)const; 
private: 
    double _kStartTime; 
    double _kEndTime; 
}; 
Q_DECLARE_METATYPE(MyTimeLine) 

然後我將它轉換中的QVariant,當我想用​​qvariant_cast並獲得MyTimeLine對象,我得到的對象,默認的構造函數創建

myTask->setData(2,Qt::UserRole, 
QVariant::fromValue(MyTimeLine(a,b))); 

MyTimeLine taskTimeLine = qvariant_cast<MyTimeLine>(index.data()); 
//taskTimeLine._kStartTime = 0; 
//taskTimeLine._kEndTime = 1; 
+0

也許你的'index.data()'返回這樣的對象? – vahancho

+0

謝謝,我忘了指定角色,index.data(Qt :: UserRole)返回我想要的 – user3510417

+0

'qRegisterMetaType'錯過 –

回答

1

您確定index.data()可以轉換爲MyTimeLine嗎?

T qvariant_cast (const QVariant & value) 

返回轉換爲模板類型T. 給定的值。該功能相當於的QVariant ::值()。

T QVariant::value() const 

返回轉換爲模板類型T的存儲值。調用canConvert()以查明是否可以轉換類型。 如果該值無法轉換,則返回默認構造的值。