Russian Qt Forum

Программирование => Python => Тема начата: paul_winex от Сентябрь 16, 2012, 21:18



Название: Взаимодействие PyQt и приложения на Qt
Отправлено: paul_winex от Сентябрь 16, 2012, 21:18
Приветствую всех. У меня вопрос про интеграцию моего PyQT виджета в уже готовое приложение.
Речь идет о Autodesk Maya. В данный момент её интерфейс полностью написан на Qt. Для создания своих элементов интерфейса используется PyQt. Отдельно встроить  что-то кудато и оттуда выполнять майские команды - не проблема. но возникла задача взаимодействовать  с интерфейсом. В частности, по дефолту там реализована система drag&drop из нодового редактора на атрибуты других нод. И мне требуется из моего виджета так же перетаскивать эелменты на виджеты интерфейса майки. в общем так...

Имеется: окошка, написанная на PyQt. В своем составе имеет древовидный список, то есть является классом QTreeWidget.
Задача: организовать адекватный drag&drop элементов списка на майские виджеты (в Атрибут эдиторе).
Варианты:
- получить базовый виджет атрибутЭдитора, и переопределить у него функцию dropEvent. Результат не удачный. Либо совсем не сработало, либо чего то не хватает. Фитбек нулевой.
- получив виджет АЕ, добавить на него eventFilter на эвент drop. Результат так же нулевой, из-за того что Во время дропЭвента виджеты под курсором считывают дату из перетаскиваемого элемента, и при не соответствии типов отвергают эвент (типа нельзя, курсор соответственный), эвент drop вообще не заводится. В общем не срабатывает.
- переопределить у моего QTreeWidget'а функцию mouseReleaseEvent и в момент отпускания мыши тупо считывать виджет под курсором, и после делать с ним что угодно. Изврат полный но работает. Тем не менее после переопределения mouseReleaseEvent процесс перетаскивания перестал работать. Хоть и релиз срабатывает, но захвата нет. Отпускается ничто.
- узнать какие данные требуется передавать чтобы виджеты принимали данные как-будто от своих родных элементов. Записать в своих виджетах такие же данные. только я вообще не соображу как это сделать!

В общем я в тупике пока. есть ли у кого идейки как такое реализовать ???
Спасибо!