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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Вопрос по сигналу/слоту  (Прочитано 8634 раз)
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« : Август 27, 2014, 08:11 »

Здравствуйте делаю файловый менеджер


файловый менеджер в treeview
собственно я начинаю кликать по файлам или папкам... зажав клавишу ctrl добавляются объекты в список
затем нажимаю пкм появляется меню.
но когда я активирую пункт меню у меня почему то еще и происходит сигнал treeview_clicked( клик по файлу или папке) воз можно сделать так чтобы когда появлялось меню ( при нажатии пкм) и после активации пункта меню не испускался сигнал клика по модели\?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Август 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

Вот тут(on_treeView_customContextMenuRequested) работал с customContextMenuRequested
« Последнее редактирование: Август 27, 2014, 08:25 от gil9red » Записан

koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #2 : Август 27, 2014, 19:05 »

вы бы что посоветовали сделать?
Записан
Bepec
Гость
« Ответ #3 : Август 27, 2014, 19:23 »

А вы разграничьте RightClick и LeftClick и сами управляйте выделением.

А так то это нормальная ситуация - как и везде. К примеру тоталкоммандер - натыкиваем группу, потом на ещё одном правый клик - и он присоединяется к группе + меню.

PS по-моему вы принимаете за ошибку нормальное поведение Улыбающийся
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Август 27, 2014, 19:26 »

вы бы что посоветовали сделать?

Не париться Улыбающийся
Записан

koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #5 : Август 27, 2014, 19:55 »

А вы разграничьте RightClick и LeftClick и сами управляйте выделением.

А так то это нормальная ситуация - как и везде. К примеру тоталкоммандер - натыкиваем группу, потом на ещё одном правый клик - и он присоединяется к группе + меню.

PS по-моему вы принимаете за ошибку нормальное поведение Улыбающийся

у меня разграничен клик левой и пкм
пкм-меню

мне нужно сделать так как я выше описал
« Последнее редактирование: Август 27, 2014, 19:59 от koldun90 » Записан
Bepec
Гость
« Ответ #6 : Август 27, 2014, 19:58 »

У вас скорее всего разграничено поведение на левый и правый клик ПОСЛЕ обработки клика самим View Улыбающийся А то, что я предлагаю - это переписать поведение view.
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #7 : Август 27, 2014, 20:00 »

У вас скорее всего разграничено поведение на левый и правый клик ПОСЛЕ обработки клика самим View Улыбающийся А то, что я предлагаю - это переписать поведение view.

вы имеете ввиду
Код:
mousePressEvent(QMouseEvent *event)
?
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #8 : Август 27, 2014, 20:04 »

У вас скорее всего разграничено поведение на левый и правый клик ПОСЛЕ обработки клика самим View Улыбающийся А то, что я предлагаю - это переписать поведение view.
а какой метод нужно тогда переписывать?
Записан
Bepec
Гость
« Ответ #9 : Август 27, 2014, 20:38 »

Можно не переписывать, а поставить EventFilter.
installEventFilter(QObject *) в Assistant посмотрите, пример там есть. Так же описано у Шлее в книге.
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #10 : Август 28, 2014, 11:30 »

Можно не переписывать, а поставить EventFilter.
installEventFilter(QObject *) в Assistant посмотрите, пример там есть. Так же описано у Шлее в книге.
Вы не могли бы пояснить что нужно написать QObject *?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #11 : Август 28, 2014, 13:17 »

Можно не переписывать, а поставить EventFilter.
installEventFilter(QObject *) в Assistant посмотрите, пример там есть. Так же описано у Шлее в книге.
Вы не могли бы пояснить что нужно написать QObject *?

Пользуйтесь гуглом и документацией!
QObject базовый класс почти для всех классов в Qt.
В installEventFilter(QObject *) передается указатель на класс, который наследуется от QObject (или его потомки наследуются), т.е. этот класс умеет отсылать сигналы и принимать сигналы.
В вашем же случаи нужно передать указатель на treeview. Как я помню, Q*View сами не отлавливают события от мышки, а отлавливают их viewport, потому: installEventFilter( treeview->viewport() ). Как то, так.
Записан

Bepec
Гость
« Ответ #12 : Август 28, 2014, 14:41 »

Истину глаголет сей батюшка. И да - читать надо сообщения. И читать Assistant. И понимать что там написано.
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #13 : Сентябрь 14, 2014, 15:33 »

так не помогает ничего...
ни так
Код:
ui->treeView->installEventFilter(ui->treeView->viewport());

ни так
Код:
installEventFilter(ui->treeView->viewport())
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #14 : Сентябрь 14, 2014, 19:17 »

в документации же четко сказано:
|объект чьи события надо ловить|->installEventFilter(|объект который ловит чужие события, т.е. в котором переопределен метод eventFilter|)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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