Название: Как отследить клик мыши по ПУСТОМУ месту в 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 * ) Плюс QModelIndex QTableView::indexAt ( const QPoint & pos ) const [virtual]mouseReleaseEvent ( QMouseEvent * ) Название: Re: Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView? Отправлено: sasha12345 от Июль 11, 2012, 19:00 mousePressEvent ( QMouseEvent * ) Т.е. нужно снаследоваться от QTableView и добавить эти ф-ии. Но я же хотел без наследования, потому, что форму с QTableView я рисую в дизайнере и объект класса QTableView за меня создаёт Qt-компилятор, как мне ему сказать чтобы он брал мой класс?mouseReleaseEvent ( QMouseEvent * ) Название: 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 * ) Плюс QModelIndex QTableView::indexAt ( const QPoint & pos ) const [virtual]mouseReleaseEvent ( QMouseEvent * ) Название: Re: Как отследить клик мыши по ПУСТОМУ месту в QAbstractItemView? Отправлено: Bepec от Июль 12, 2012, 06:57 Я бы сказал, что установка фильтра на всё - го... плохое решение.
Хотя это мнение и оспаривают :) PS сначала конечно приходят сообщение в ммм... область рисования, скажем так - точное название не упомню с утра. (там достаточно интересный бутерброд реализован) PPS сам посуди, ты фильтруешь все события своего приложения, а mouseDoubleClickEvent только при нажатии на твой view :) |