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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подобие талицы из виджетов  (Прочитано 5302 раз)
kdm
Гость
« : Август 01, 2010, 13:30 »

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

через QScrollArea можно всё это сделать
Записан
kdm
Гость
« Ответ #2 : Август 01, 2010, 15:02 »

Ну да, QScrollArea будет, но у меня проблемма с выделением так называемых айтемов этой таблицы, которые представляют собой самостоятельные виджеты. Как перехватывать событие клика на виджет и контролы внутри его и выделять виджет рамкой?
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #3 : Август 01, 2010, 16:33 »

Вот держи демку, не таблица ,но принцип похожий можно будет сделать.
Записан
kdm
Гость
« Ответ #4 : Август 02, 2010, 10:44 »

Спасибо за пример. А как отлавливать событие того, чтобы кликнут компонент внутри видже (который представляет собой ячейку) без installEventFilter? Мне это нужно, если к примеру внутри виджета динамически добавляются новые компоненты, то для них тоже нужно устанавливать installEventFilter. А как обойтись без лишнего кода?
Записан
ufna
Гость
« Ответ #5 : Август 02, 2010, 14:11 »

просто внутри этого виджета-айтема ловить клик, и менять ему стейт клика.
Записан
kdm
Гость
« Ответ #6 : Август 02, 2010, 17:00 »

Сделал обратку клика в виджете-айтеме. Но если в виджет-айтем добавить QLineEdit, то клик перехватывается и ивент не выходит. Пробовал сделать с FocusPolicy. При клике на лейбел все робит, при клике на QLineEdit, снова LineEdit перехватывает ивент о фокусе. Не знаю, что и делать.
Записан
ufna
Гость
« Ответ #7 : Август 02, 2010, 19:07 »

ловить момент передачи фокуса у всех виджетов-дитенышей?
Записан
kdm
Гость
« Ответ #8 : Август 02, 2010, 20:51 »

придется переопределять классы, чтобы те генерили сигнал gotFocus? В принципе можно, но хотелось бы сделать универсально.
« Последнее редактирование: Август 02, 2010, 22:24 от kdm » Записан
kdm
Гость
« Ответ #9 : Август 03, 2010, 20:37 »

Приделал обработчик childEvent и при добавлении виджета устанавливаю фильтр installEventFilter и при QEvent::FocusIn устанавливаю рамку. Интересно, а если будет добавлен виджет, который сам родитель, его виджеты наверное не пройдут в обработчик?
Записан
ufna
Гость
« Ответ #10 : Август 03, 2010, 21:10 »

да можно проще - в главном виджете, который типа список, ловить все нажатия мыши. Ловить, смотреть по положению на какой виджет "элемент списка" клик пришелся, и дальше передавать этот эвент, чисто посмотрев данные и от них - уже "выделить" нужный.
Записан
kdm
Гость
« Ответ #11 : Август 03, 2010, 21:18 »

А как так сделать? Я пробовал переопределять mousePressEvent, но когда кликал по QLineEdit внутри виджета-айтема выполнение в обработчик не заходило. Есть вроде функция заграбить мышь, но не оч. представляю как надо тогда обрабатывать.
В принципе, можно и так оставить, я же не официальный класс разрабатываю, по этому для программы сойдет и так Улыбающийся
В любом случае, спасибо за советы Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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