Russian Qt Forum

Qt => Model-View (MV) => Тема начата: sasha12345 от Июль 06, 2012, 16:21



Название: Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView?
Отправлено: sasha12345 от Июль 06, 2012, 16:21
Здравствуйте,

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

Наследовать не хочется т.к, View я рисую в дизайнере и соответственно объект соотвествующего класса создаётся за меня автоматически.


Название: Re: Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView?
Отправлено: CuteBunny от Июль 06, 2012, 16:27
Хммм...
Abstract


Название: Re: Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView?
Отправлено: kambala от Июль 06, 2012, 16:59
QAbstractItemView в дизайнере создать нельзя вообще-то, можно только его наследников (список/дерево/таблица). а пустое место или нет определяет модель.


Название: Re: Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView?
Отправлено: sasha12345 от Июль 10, 2012, 17:56
QAbstractItemView в дизайнере создать нельзя вообще-то, можно только его наследников (список/дерево/таблица).
В моём случае - это QTableView.
а пустое место или нет определяет модель.
Как?
Что, при клике вызовется какой-то метод модели?


Название: Re: Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView?
Отправлено: Bepec от Июль 11, 2012, 06:57
mousePressEvent ( QMouseEvent * )
mouseReleaseEvent ( QMouseEvent * )


Название: Re: Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView?
Отправлено: Kurles от Июль 11, 2012, 07:06
mousePressEvent ( QMouseEvent * )
mouseReleaseEvent ( QMouseEvent * )
Плюс QModelIndex QTableView::indexAt ( const QPoint & pos ) const [virtual]


Название: Re: Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView?
Отправлено: sasha12345 от Июль 11, 2012, 19:00
mousePressEvent ( QMouseEvent * )
mouseReleaseEvent ( QMouseEvent * )
Т.е. нужно снаследоваться от QTableView и добавить эти ф-ии. Но я же хотел без наследования, потому, что форму с QTableView я рисую в дизайнере и объект класса QTableView за меня создаёт Qt-компилятор, как мне ему сказать чтобы он брал мой класс?


Название: Re: Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView?
Отправлено: Bepec от Июль 11, 2012, 19:07
Promote to в контекстном меню в дизайнере.


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

Если кратко, то проблемму я решил установив фильтр во всём дереве подъобъектов моего объекта.


Название: Re: Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView?
Отправлено: sasha12345 от Июль 11, 2012, 21:52
mousePressEvent ( QMouseEvent * )
mouseReleaseEvent ( QMouseEvent * )
Плюс QModelIndex QTableView::indexAt ( const QPoint & pos ) const [virtual]
Спасибо


Название: Re: Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView?
Отправлено: Bepec от Июль 12, 2012, 06:57
Я бы сказал, что установка фильтра на всё - го... плохое решение.

Хотя это мнение и оспаривают :)

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

PPS сам посуди, ты фильтруешь все события своего приложения, а mouseDoubleClickEvent только при нажатии на твой view :)