Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: kdm от Август 01, 2010, 13:30



Название: Подобие талицы из виджетов
Отправлено: kdm от Август 01, 2010, 13:30
Вот другой вопрос меня очень волнует, как делать. Примерно представляю, но кажется слишком криво получится.
Дело в том, что хотел сделать одностолбцовую таблицу, в которой элементы - обычные виджеты, хранящие в себе другие виджеты (как на рисунке). И при том, когда пользователь кликает на любой элемент внутри виджета или на сам виджет, он бы выделялся цветной рамкой. Как так сделать? Как перехватить события о клике на элемент внутри виджета?


Название: Re: Подобие талицы из виджетов
Отправлено: Makss от Август 01, 2010, 13:35
через QScrollArea можно всё это сделать


Название: Re: Подобие талицы из виджетов
Отправлено: kdm от Август 01, 2010, 15:02
Ну да, QScrollArea будет, но у меня проблемма с выделением так называемых айтемов этой таблицы, которые представляют собой самостоятельные виджеты. Как перехватывать событие клика на виджет и контролы внутри его и выделять виджет рамкой?


Название: Re: Подобие талицы из виджетов
Отправлено: ecspertiza от Август 01, 2010, 16:33
Вот держи демку, не таблица ,но принцип похожий можно будет сделать.


Название: Re: Подобие талицы из виджетов
Отправлено: kdm от Август 02, 2010, 10:44
Спасибо за пример. А как отлавливать событие того, чтобы кликнут компонент внутри видже (который представляет собой ячейку) без installEventFilter? Мне это нужно, если к примеру внутри виджета динамически добавляются новые компоненты, то для них тоже нужно устанавливать installEventFilter. А как обойтись без лишнего кода?


Название: Re: Подобие талицы из виджетов
Отправлено: ufna от Август 02, 2010, 14:11
просто внутри этого виджета-айтема ловить клик, и менять ему стейт клика.


Название: Re: Подобие талицы из виджетов
Отправлено: kdm от Август 02, 2010, 17:00
Сделал обратку клика в виджете-айтеме. Но если в виджет-айтем добавить QLineEdit, то клик перехватывается и ивент не выходит. Пробовал сделать с FocusPolicy. При клике на лейбел все робит, при клике на QLineEdit, снова LineEdit перехватывает ивент о фокусе. Не знаю, что и делать.


Название: Re: Подобие талицы из виджетов
Отправлено: ufna от Август 02, 2010, 19:07
ловить момент передачи фокуса у всех виджетов-дитенышей?


Название: Re: Подобие талицы из виджетов
Отправлено: kdm от Август 02, 2010, 20:51
придется переопределять классы, чтобы те генерили сигнал gotFocus? В принципе можно, но хотелось бы сделать универсально.


Название: Re: Подобие талицы из виджетов
Отправлено: kdm от Август 03, 2010, 20:37
Приделал обработчик childEvent и при добавлении виджета устанавливаю фильтр installEventFilter и при QEvent::FocusIn устанавливаю рамку. Интересно, а если будет добавлен виджет, который сам родитель, его виджеты наверное не пройдут в обработчик?


Название: Re: Подобие талицы из виджетов
Отправлено: ufna от Август 03, 2010, 21:10
да можно проще - в главном виджете, который типа список, ловить все нажатия мыши. Ловить, смотреть по положению на какой виджет "элемент списка" клик пришелся, и дальше передавать этот эвент, чисто посмотрев данные и от них - уже "выделить" нужный.


Название: Re: Подобие талицы из виджетов
Отправлено: kdm от Август 03, 2010, 21:18
А как так сделать? Я пробовал переопределять mousePressEvent, но когда кликал по QLineEdit внутри виджета-айтема выполнение в обработчик не заходило. Есть вроде функция заграбить мышь, но не оч. представляю как надо тогда обрабатывать.
В принципе, можно и так оставить, я же не официальный класс разрабатываю, по этому для программы сойдет и так :)
В любом случае, спасибо за советы :)