QVariant 存放指针

关于QVariant存放指针,突然想到一个简单的方法,那就是使用union

直接上代码

union MyData
{
    int Address;
    MyClass* Pointer;
}
...

//存
MyClass* myData = new MyClass();
QTreeWidgetItem* item = new QTreeWidgetItem("Item");
MyData myData;
myData.Pointer= myData; 
item->setData(0, QVariant::formValue(myData.Address)) ;

//取
QVariant data = item->data(0);
if(data.isValid()) 
{
    MyData myData;
    myData.Address = data.toInt();
    MyClass* object = myData.Pointer;
}  

用这种方法在拖拽item时不会出现QT的断言错误,不过在存和取之间要保证对象没有被删除

你可能感兴趣的:(object,qt)