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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView?  (Прочитано 7212 раз)
sasha12345
Гость
« : Июль 06, 2012, 16:21 »

Здравствуйте,

Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView?

Наследовать не хочется т.к, View я рисую в дизайнере и соответственно объект соотвествующего класса создаётся за меня автоматически.
Записан
CuteBunny
Гость
« Ответ #1 : Июль 06, 2012, 16:27 »

Хммм...
Abstract
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #2 : Июль 06, 2012, 16:59 »

QAbstractItemView в дизайнере создать нельзя вообще-то, можно только его наследников (список/дерево/таблица). а пустое место или нет определяет модель.
Записан

Изучением 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
sasha12345
Гость
« Ответ #3 : Июль 10, 2012, 17:56 »

QAbstractItemView в дизайнере создать нельзя вообще-то, можно только его наследников (список/дерево/таблица).
В моём случае - это QTableView.
а пустое место или нет определяет модель.
Как?
Что, при клике вызовется какой-то метод модели?
Записан
Bepec
Гость
« Ответ #4 : Июль 11, 2012, 06:57 »

mousePressEvent ( QMouseEvent * )
mouseReleaseEvent ( QMouseEvent * )
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #5 : Июль 11, 2012, 07:06 »

mousePressEvent ( QMouseEvent * )
mouseReleaseEvent ( QMouseEvent * )
Плюс QModelIndex QTableView::indexAt ( const QPoint & pos ) const [virtual]
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
sasha12345
Гость
« Ответ #6 : Июль 11, 2012, 19:00 »

mousePressEvent ( QMouseEvent * )
mouseReleaseEvent ( QMouseEvent * )
Т.е. нужно снаследоваться от QTableView и добавить эти ф-ии. Но я же хотел без наследования, потому, что форму с QTableView я рисую в дизайнере и объект класса QTableView за меня создаёт Qt-компилятор, как мне ему сказать чтобы он брал мой класс?
Записан
Bepec
Гость
« Ответ #7 : Июль 11, 2012, 19:07 »

Promote to в контекстном меню в дизайнере.
Записан
sasha12345
Гость
« Ответ #8 : Июль 11, 2012, 21:09 »

Promote to в контекстном меню в дизайнере.
Спсибо. Только у меня русифицированный дизайнер, там "Преобразовать в...".
Кому интересно, вот моя история про перехват событий мыши:
Когда я нашёл в дизайнере команду "Преобразовать в..." и стал делать, вспомнил, что есть же фильтры событий. Обрадовался, нашёл описание, сделал и... моя радость была не долгой. Разные события ловятся, а мышинные НЕТ! Решил всё-же довести до конца наследника QTableView. Довёл, но решил переопрелить не mouseDoubleClickEvent, а просто event. То же самое, что и с фильтром - не приходят события мыши. Я в этом был почти уверен, поскольку уже успел полазить дебагером по коду Qt. Ну и когда всё же переопределил mouseDoubleClickEvent, оно поймалось. Логично, иначе зачем бы эта ф-я вообще была-бы. Но мне это всё-таки не нравилось и я ещё когда лазил дебагером, догадывался, что события мыши первым делом приходят не в видимый мне объект класса QTableView, а в какой-то другой,по всей видимости дочерний для него (имя класса - просто QWidget). Вывел дамп дерева объектов моей таблицы - полезного ничего не нашёл, т.к. не понял какой же из этих объектов мог быть первым в очереди при клике мышью. Решил Spy-ем посмотреть из каких оконных частей солстоит таблица в Qt и обнаружил интересную вещь - диалог с таблицей и кнопками состоит только из ОДНОГО! окна, т.е. Qt всё сама рисует. Ну и наконец решил скопировать код дампа дерева объекта, заменив вывод в лог, на установку фильтра. Т.е просто установил свой филтр во всё дерево объектов моей таблицы и наконец поймал сообщение мыши!

Если кратко, то проблемму я решил установив фильтр во всём дереве подъобъектов моего объекта.
Записан
sasha12345
Гость
« Ответ #9 : Июль 11, 2012, 21:52 »

mousePressEvent ( QMouseEvent * )
mouseReleaseEvent ( QMouseEvent * )
Плюс QModelIndex QTableView::indexAt ( const QPoint & pos ) const [virtual]
Спасибо
Записан
Bepec
Гость
« Ответ #10 : Июль 12, 2012, 06:57 »

Я бы сказал, что установка фильтра на всё - го... плохое решение.

Хотя это мнение и оспаривают Улыбающийся

PS сначала конечно приходят сообщение в ммм... область рисования, скажем так - точное название не упомню с утра. (там достаточно интересный бутерброд реализован)

PPS сам посуди, ты фильтруешь все события своего приложения, а mouseDoubleClickEvent только при нажатии на твой view Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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