Miga
21st May 2012, 10:32
Hello!
I would like to realize drag&drop with reimplemented QStandardItemModel. QStandardItem also reimplemented. It looks like:
class _DLL_PREFIX_ TMyItem : public QStandardItem
{
public:
virtual QVariant data(int role = Qt::UserRole + 1) const;
virtual void setData(const QVariant &value, int role = Qt::UserRole + 1);
private:
TElementData *m_pElementData;
}
QVariant TMyItem::data(int role) const
{
if (role == Qt::UserRole+1)
{
return QVariant::fromValue(m_pElementData);
}
return QStandardItem::data(role);
}
void TMyItem::setData(const QVariant &value, int role)
{
if (role == Qt::UserRole+1)
{
ASSERT(value.canConvert<TElementData *>())
m_pElementData = value.value<TElementData*>()->clone();
return;
}
QStandardItem::setData(value, role);
}
When I try to drag an element within the model (to reorder elements) I find out that user data is not copied (m_pElementData = NULL in the dropped element). I think I should reimplement some other functions to make all this work correctly. But I'm not quite sure what functions and in what classes. It seems to me that: QStandardItemModel::mimeData(...), maybe QStandardItemModel::itemData (...)? Something else?
Thanks in advance.
I would like to realize drag&drop with reimplemented QStandardItemModel. QStandardItem also reimplemented. It looks like:
class _DLL_PREFIX_ TMyItem : public QStandardItem
{
public:
virtual QVariant data(int role = Qt::UserRole + 1) const;
virtual void setData(const QVariant &value, int role = Qt::UserRole + 1);
private:
TElementData *m_pElementData;
}
QVariant TMyItem::data(int role) const
{
if (role == Qt::UserRole+1)
{
return QVariant::fromValue(m_pElementData);
}
return QStandardItem::data(role);
}
void TMyItem::setData(const QVariant &value, int role)
{
if (role == Qt::UserRole+1)
{
ASSERT(value.canConvert<TElementData *>())
m_pElementData = value.value<TElementData*>()->clone();
return;
}
QStandardItem::setData(value, role);
}
When I try to drag an element within the model (to reorder elements) I find out that user data is not copied (m_pElementData = NULL in the dropped element). I think I should reimplement some other functions to make all this work correctly. But I'm not quite sure what functions and in what classes. It seems to me that: QStandardItemModel::mimeData(...), maybe QStandardItemModel::itemData (...)? Something else?
Thanks in advance.