QMimeData* TreeWidget::mimeData(const QList<QTreeWidgetItem*> items) const { QMimeData* data = new QMimeData(); QByteArray encodedData; QDataStream stream(&encodedData, QIODevice::WriteOnly); foreach (const QTreeWidgetItem* item, items) { if (!item) { continue; } // Why not just pass pointers ??!! QTreeWidgetItem* clonedItem = item->clone(); // #1097 Clearing icon will properly write this item into stream ... clonedItem->setIcon(0, QIcon()); bool parentIsRoot = !item->parent() || item->parent() == invisibleRootItem(); clonedItem->setData(0, ITEM_IS_TOPLEVEL, parentIsRoot); clonedItem->setData(0, ITEM_PARENT_TITLE, (parentIsRoot ? QString() : item->parent()->text(0))) ; clonedItem->write(stream); delete clonedItem; } data->setData(m_mimeType, encodedData); return data; }
void QTreeWidgetItemProto::write(QDataStream &out) const { QTreeWidgetItem *item = qscriptvalue_cast<QTreeWidgetItem*>(thisObject()); if (item) item->write(out); }