Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Stuart от Января 16, 2010, 16:23



Название: Не работают события D&D под Linux
Отправлено: Stuart от Января 16, 2010, 16:23
Имеется класс, наследуемый от QMainWindow. В секции protected, как и полагается, переопределены виртуальные функции dragEnterEvent, dragMoveEvent и dropEvent. Отлавливаю перемещение узлов QTreeWidgetItem внутри виджета QTreeWidget. В Windows функции вызываются и корректно работают. В Linux вообще никакие события Drag&Drop не отлавливаются на том же самом коде. Почему? Где подводные камни и в чём может быть косяк?

В Windows Qt 4.5.0, компилятор MS C++ 2008 SP1. Под Linux пробовал под Qt 4.4.3 и 4.5.3 на gcc 3.4.6 и 4.4.1.


Название: Re: Не работают события D&D под Linux
Отправлено: BlackTass от Января 16, 2010, 16:54
Минимально компилябельный код можете выложить?


Название: Re: Не работают события D&D под Linux
Отправлено: Stuart от Января 16, 2010, 18:08
Да, немного переделал. Требуется срабатывание метода void ISConfigurator::dragEnterEvent(QDragEnterEvent * event). Он должен вызываться при перемещении узлов дерева внутри виджета QTreeWidget с целью информирования пользователя о сохранённых изменениях. Но в Linux это не происходит, в венде проблем нет.


Название: Re: Не работают события D&D под Linux
Отправлено: Павел_F. от Января 16, 2010, 18:26
У QTableWidget тоже самое было. Добавьте :
Код
C++ (Qt)
bool MyTableWidget::eventFilter( QObject *obj, QEvent *event)
{
   if( event->type() == QEvent::DragMove || event->type() == QEvent::DragEnter) return true;
   else return QObject::eventFilter( obj, event);
}
Ну и
Код
C++ (Qt)
MyTableWidget::MyTableWidget( QWidget *parent) : QTableWidget( parent)
{
   viewport()->installEventFilter( this);
}
Для QTableWidget все начало работать.


Название: Re: Не работают события D&D под Linux
Отправлено: Stuart от Января 16, 2010, 19:44
Не получится: класс наследуется от QMainWindow, от QTreeWidget нельзя. :(


Название: Re: Не работают события D&D под Linux
Отправлено: Павел_F. от Января 16, 2010, 20:01
Раз используется QTreeWidget в чем проблема сделать свой TreeWidget с измененным фильтром и использовать его вместо QTreeWidget???


Название: Re: Не работают события D&D под Linux
Отправлено: Stuart от Января 16, 2010, 21:17
Немного не представляю, как это сделать, когда класс завязан с UI Qt, да и переписывать много придётся...


Название: Re: Не работают события D&D под Linux
Отправлено: Авварон от Января 16, 2010, 22:33
в смысле класс на ui-шке? в дизайнере есть promote to...


Название: Re: Не работают события D&D под Linux
Отправлено: Павел_F. от Января 16, 2010, 23:20
да и переписывать много придётся...
Про ui ничего не скажу... У меня без них. Всех переделок, у меня, на 30 сек.