Russian Qt Forum
Ноябрь 27, 2024, 03:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: DnD из QTreeWidget  (Прочитано 3200 раз)
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);
}
}
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Май 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;
   . . .
}
Записан

Qt 5.11/4.8.7 (X11/Win)
White Owl
Гость
« Ответ #2 : Май 10, 2011, 17:15 »

ээээ... не понял.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Май 10, 2011, 17:22 »

Цитировать
ээээ... не понял.
Чего не понял-то?
В mimeData QTreeWidgetItem-ы не хранятся. Их ты можешь получить через row,col.
Записан

Qt 5.11/4.8.7 (X11/Win)
jurtal
Гость
« Ответ #4 : Август 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");
}
Массив пустой...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.095 секунд. Запросов: 23.