Название: Вопрос по сигналу/слоту Отправлено: koldun90 от Август 27, 2014, 08:11 Здравствуйте делаю файловый менеджер
(http://i053.radikal.ru/1408/d8/f010fa9252b9.png) (http://www.radikal.ru) файловый менеджер в treeview собственно я начинаю кликать по файлам или папкам... зажав клавишу ctrl добавляются объекты в список затем нажимаю пкм появляется меню. но когда я активирую пункт меню у меня почему то еще и происходит сигнал treeview_clicked( клик по файлу или папке) воз можно сделать так чтобы когда появлялось меню ( при нажатии пкм) и после активации пункта меню не испускался сигнал клика по модели\? Название: Re: Вопрос по сигналу/слоту Отправлено: gil9red от Август 27, 2014, 08:21 Можно посмотреть в сторону:
http://qt-project.org/doc/qt-4.8/qwidget.html#customContextMenuRequested http://qt-project.org/doc/qt-4.8/qwidget.html#contextMenuEvent http://qt-project.org/doc/qt-4.8/qwidget.html#contextMenuPolicy-prop Вот тут (https://github.com/gil9red/NotesManager/blob/master/NavigationPanel/foldernavigationwidget.cpp)(on_treeView_customContextMenuRequested) работал с customContextMenuRequested Название: Re: Вопрос по сигналу/слоту Отправлено: koldun90 от Август 27, 2014, 19:05 вы бы что посоветовали сделать?
Название: Re: Вопрос по сигналу/слоту Отправлено: Bepec от Август 27, 2014, 19:23 А вы разграничьте RightClick и LeftClick и сами управляйте выделением.
А так то это нормальная ситуация - как и везде. К примеру тоталкоммандер - натыкиваем группу, потом на ещё одном правый клик - и он присоединяется к группе + меню. PS по-моему вы принимаете за ошибку нормальное поведение :) Название: Re: Вопрос по сигналу/слоту Отправлено: gil9red от Август 27, 2014, 19:26 Название: Re: Вопрос по сигналу/слоту Отправлено: koldun90 от Август 27, 2014, 19:55 А вы разграничьте RightClick и LeftClick и сами управляйте выделением. у меня разграничен клик левой и пкмА так то это нормальная ситуация - как и везде. К примеру тоталкоммандер - натыкиваем группу, потом на ещё одном правый клик - и он присоединяется к группе + меню. PS по-моему вы принимаете за ошибку нормальное поведение :) пкм-меню мне нужно сделать так как я выше описал Название: Re: Вопрос по сигналу/слоту Отправлено: Bepec от Август 27, 2014, 19:58 У вас скорее всего разграничено поведение на левый и правый клик ПОСЛЕ обработки клика самим View :) А то, что я предлагаю - это переписать поведение view.
Название: Re: Вопрос по сигналу/слоту Отправлено: koldun90 от Август 27, 2014, 20:00 У вас скорее всего разграничено поведение на левый и правый клик ПОСЛЕ обработки клика самим View :) А то, что я предлагаю - это переписать поведение view. вы имеете ввиду Код: mousePressEvent(QMouseEvent *event) Название: Re: Вопрос по сигналу/слоту Отправлено: koldun90 от Август 27, 2014, 20:04 У вас скорее всего разграничено поведение на левый и правый клик ПОСЛЕ обработки клика самим View :) А то, что я предлагаю - это переписать поведение view. а какой метод нужно тогда переписывать?Название: Re: Вопрос по сигналу/слоту Отправлено: Bepec от Август 27, 2014, 20:38 Можно не переписывать, а поставить EventFilter.
installEventFilter(QObject *) в Assistant посмотрите, пример там есть. Так же описано у Шлее в книге. Название: Re: Вопрос по сигналу/слоту Отправлено: koldun90 от Август 28, 2014, 11:30 Можно не переписывать, а поставить EventFilter. Вы не могли бы пояснить что нужно написать QObject *?installEventFilter(QObject *) в Assistant посмотрите, пример там есть. Так же описано у Шлее в книге. Название: Re: Вопрос по сигналу/слоту Отправлено: gil9red от Август 28, 2014, 13:17 Можно не переписывать, а поставить EventFilter. Вы не могли бы пояснить что нужно написать QObject *?installEventFilter(QObject *) в Assistant посмотрите, пример там есть. Так же описано у Шлее в книге. Пользуйтесь гуглом и документацией! QObject базовый класс почти для всех классов в Qt. В installEventFilter(QObject *) передается указатель на класс, который наследуется от QObject (или его потомки наследуются), т.е. этот класс умеет отсылать сигналы и принимать сигналы. В вашем же случаи нужно передать указатель на treeview. Как я помню, Q*View сами не отлавливают события от мышки, а отлавливают их viewport, потому: installEventFilter( treeview->viewport() ). Как то, так. Название: Re: Вопрос по сигналу/слоту Отправлено: Bepec от Август 28, 2014, 14:41 Истину глаголет сей батюшка. И да - читать надо сообщения. И читать Assistant. И понимать что там написано.
Название: Re: Вопрос по сигналу/слоту Отправлено: koldun90 от Сентябрь 14, 2014, 15:33 так не помогает ничего...
ни так Код: ui->treeView->installEventFilter(ui->treeView->viewport()); ни так Код: installEventFilter(ui->treeView->viewport()) Название: Re: Вопрос по сигналу/слоту Отправлено: kambala от Сентябрь 14, 2014, 19:17 в документации же четко сказано:
|объект чьи события надо ловить|->installEventFilter(|объект который ловит чужие события, т.е. в котором переопределен метод eventFilter|) Название: Re: Вопрос по сигналу/слоту Отправлено: koldun90 от Сентябрь 14, 2014, 21:45 Код: menu->installEventFilter(ui->treeView->viewport()); так тоже ничего... Название: Re: Вопрос по сигналу/слоту Отправлено: gil9red от Сентябрь 14, 2014, 23:33 Пример использования installEventFilter (http://qt-project.org/doc/qt-4.8/qobject.html#installEventFilter)
Название: Re: Вопрос по сигналу/слоту Отправлено: kambala от Сентябрь 15, 2014, 00:43 ui->treeView->viewport()->installEventFilter(this);
в текущем классе переопределяешь метод eventFilter и для клика ПКМ показываешь свое контекстное меню, возвращая при этом true из eventFilter Название: Re: Вопрос по сигналу/слоту Отправлено: koldun90 от Сентябрь 15, 2014, 04:57 Цитировать в текущем классе переопределяешь метод eventFilter таким образом event filter надо определить для treeeview я правильно понял?или нужно все таки для this? Название: Re: Вопрос по сигналу/слоту Отправлено: kambala от Сентябрь 15, 2014, 13:15 в this пишешь метод и в нем проверяешь чтобы объект (первый параметр метода) был тривью
|