Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: White Owl от Май 10, 2011, 01:08



Название: DnD из QTreeWidget
Отправлено: White Owl от Май 10, 2011, 01:08
Есть дерево (QTreeWidget) из которого надо таскать листья в другой виджет. Все происходит внутри одного приложения.
Решил сделать "просто и не заморачиваясь". Выставил своему стандартному QTreeWidget setDragEnabled(true); виджету получателю setAcceptDrops(true);, прописал в окне которому принадлежит виджет-получатель dragEnterEvent() и dropEvent().
Все вроде правильно. Объект из дерева в виджет-получатель приходит.
Застрял на собственно разборе дропнутого объекта:
Код:
void MyWindow::dropEvent(QDropEvent *e) {
if( e->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
e->acceptProposedAction();
QByteArray ba = e->mimeData()->data("application/x-qabstractitemmodeldatalist");
QTreeWidgetItem twi = ba; // ???? Как?
qDebug() << twi.text(0);
}
}


Название: Re: DnD из QTreeWidget
Отправлено: GreatSnake от Май 10, 2011, 09:32
Код
C++ (Qt)
QByteArray ba = e->mimeData()->data("application/x-qabstractitemmodeldatalist");
QDataStream stream(&encoded, QIODevice::ReadOnly);
 
while( !stream.atEnd() )
{
   int row, col;
   QMap<int,  QVariant> roles;   // все значения ролей установленные для элемента в row,col (см. Qt::ItemDataRole)
   stream >> row >> col >> roles;
   . . .
}


Название: Re: DnD из QTreeWidget
Отправлено: White Owl от Май 10, 2011, 17:15
ээээ... не понял.


Название: Re: DnD из QTreeWidget
Отправлено: GreatSnake от Май 10, 2011, 17:22
Цитировать
ээээ... не понял.
Чего не понял-то?
В mimeData QTreeWidgetItem-ы не хранятся. Их ты можешь получить через row,col.


Название: Re: DnD из QTreeWidget
Отправлено: jurtal от Август 01, 2011, 13:51
Делаю также, но что-то не так...
Есть дерево (QTreeView) из которого надо таскать листья в другой виджет. Выставил своему стандартному QTreeView в дизайнере setDragEnabled(true). Виджету получателю задал setAcceptDrops(true); Прописал для виджета получателя dragEnterEvent() и dropEvent().
Но объект из дерева в виджет-получатель приходит пустой...
void CustomWidget::dropEvent(QDropEvent* pe)
{
   QByteArray ba = pe->mimeData()->data("application/x-qabstractitemmodeldatalist");
}
Массив пустой...