Название: drag & drop Отправлено: shadow от Декабрь 08, 2017, 20:08 Доброго всем времени суток!
Разбираю стандартный пример из Qt dragdroprobot, вроде все понятно но возник вопрос как обмениваться цветами между двумя объектами а не только менять цвет у робота? Пытался менять цвет в: Код: void RobotPart::dropEvent(QGraphicsSceneDragDropEvent *event) но тут уже указатель объекта на котором отпускаешь круг с цветом. Как получить указатель на перемещаемый объект(или как это правильно реализовать)? Спасибо. Название: Re: drag & drop Отправлено: Igors от Декабрь 10, 2017, 12:34 Этот пример не смотрел, но DnD задуман как "самодостаточный", т.е. также и для обмена данных между приложениями. Поэтому передаваемые данные нужно сливать в поток (QByteArray). Передавать ID объектов и даже их адреса не запрещено, но тогда об обмене "между приложениями" речь уже не идет.
Название: Re: drag & drop Отправлено: shadow от Декабрь 10, 2017, 13:30 Этот пример не смотрел, но DnD задуман как "самодостаточный", т.е. также и для обмена данных между приложениями. Поэтому передаваемые данные нужно сливать в поток (QByteArray). Передавать ID объектов и даже их адреса не запрещено, но тогда об обмене "между приложениями" речь уже не идет. Я не хочу обмениваться данными между приложениями мне бы обменяться данными между двумя QGraphicsItem?В dropEven можно получить какой нибудь индитификатор(порядковый номер например) перетаскиваемого объекта из QMime но как потом найти этот объект(и выполнить с ним требуемые модификации)? Название: Re: drag & drop Отправлено: Igors от Декабрь 10, 2017, 14:51 Я не хочу обмениваться данными между приложениями мне бы обменяться данными между двумя QGraphicsItem? Сериализовать порядковый номер в QByteArray и сделать QMimeData::setData. А на стороне приемника проверить mimeType и десериализовать. Или если mimeType совпадает, то использовать глобальную переменную или сингтон. На худой конец запихнуть в QColor :) Более изящных решений в DnD не будет, Вы уже знаете почемуВ dropEven можно получить какой нибудь индитификатор(порядковый номер например) перетаскиваемого объекта из QMime но как потом найти этот объект(и выполнить с ним требуемые модификации)? Название: Re: drag & drop Отправлено: shadow от Декабрь 10, 2017, 16:05 Я извиняюсь но я пока новичок в Qt(и С++ тоже) поясните пожалуйста:
Цитировать Сериализовать порядковый номер в QByteArray и сделать QMimeData::setData. А на стороне приемника проверить mimeType и десериализовать. Или если mimeType совпадает, то использовать глобальную переменную или сингтон. Название: Re: drag & drop Отправлено: Igors от Декабрь 11, 2017, 15:20 Сериализовать - значит сделать дамп данных, где есть только последовательность значений (без всяких объектов), часто для записи на диск или передачи по сети. Десериализовать - обратный процесс, создать объекты из дампа. Пример сериализации
Код Пример десериализации Код
Название: Re: drag & drop Отправлено: shadow от Декабрь 12, 2017, 20:23 Решил задачу: Макс Шлее стр. 484
|