Details
-
Bug
-
Resolution: Out of scope
-
P3: Somewhat important
-
4.4.3
-
None
Description
Storing void * data in the itemviews asserts when used with the standard drag drop system.
If the code in the #if 0 is enabled it works. This seems like a bug.
#include <QtGui>
#if 0 // have to do this to make it not assert
QDataStream &operator<<(QDataStream &ds, const QVariant &var)
{
if (var.userType() == QMetaType::VoidStar)
else
{ ds << int(0); var.save(ds); } return ds;
}
QDataStream &operator>>(QDataStream &ds, QVariant &var)
{
int type;
ds >> type;
if (type == 0)
else if (type == QMetaType::VoidStar)
{ QByteArray ba; ds >> ba; void *ptr; memcpy(&ptr, (void*)ba.constData(), sizeof(void*)); var = qVariantFromValue<void*>(ptr); } return ds;
}
#endif
int main(int argc, char * argv[])
{
QApplication app(argc, argv);
QWidget w;
QHBoxLayout *l = new QHBoxLayout(&w);
QTreeWidget *left = new QTreeWidget(&w);
l->addWidget(left);
left->setDragEnabled(true);
QTreeWidget *right = new QTreeWidget(&w);
l->addWidget(right);
right->setAcceptDrops(true);
QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText(0, "Item");
item->setData(0, Qt::UserRole, qVariantFromValue((void*)0));
left->addTopLevelItem(item);
w.show();
return app.exec();
}