Название: Виджет с поведением окна Отправлено: Igors от Июнь 19, 2014, 09:58 Добрый день
Внутри главного окна есть виджеты которые выглядят как окна, и по смыслу окна и есть. Но, к сожалению, поставить им флаг Qt::Window нельзя т.к. они должны быть внутри главного. Нужно пр нажатии на что угодно внутри такого виджета сделать raise чтобы он перекрыл другие (как окно при активации). Как это лучше реализовать? - навесить фильтры на все внутренности (не нравится) - перекрыть notify (лучше но придется отследить модальность и.т.п.) - более элегантное решение? Спасибо Название: Re: Виджет с поведением окна Отправлено: GreatSnake от Июнь 19, 2014, 14:18 - навесить фильтры на все внутренности (не нравится) Почему не нравится? Заведите базовый класс, в котором и навесите фильтры.Пихать всё в notify, имхо, как-то не серьёзно. Название: Re: Виджет с поведением окна Отправлено: kai666_73 от Июнь 19, 2014, 17:56 - навесить фильтры на все внутренности (не нравится) Почему не нравится? Заведите базовый класс, в котором и навесите фильтры.Пихать всё в notify, имхо, как-то не серьёзно. Базовый класс? Оо. А какого типа? Или имеется ввиду некий класс, который будет микшироваться во все типы виджетов на Задачу не облегчит, а проблем добавит, потому-что энтот класс должен наследоваться от QObject. Название: Re: Виджет с поведением окна Отправлено: kai666_73 от Июнь 19, 2014, 18:03 - навесить фильтры на все внутренности (не нравится) А если в самом Код: parentWidget.findChildren<QWidget *>() Название: Re: Виджет с поведением окна Отправлено: _OLEGator_ от Июнь 19, 2014, 18:47 Я бы использовал QGraphicsView/Scene для такого, нужный функционал там имеется.
Название: Re: Виджет с поведением окна Отправлено: Igors от Июнь 19, 2014, 18:54 Почему не нравится? Заведите базовый класс, в котором и навесите фильтры. Как-то "несообразно" - цель довольно мелкая, а тут "целое наследование"А если в самом Так могут добавляться дынамычно. И вообще, в случае фильтра raise будет вызываться после события мыши - и это может иметь значение. Напр raise вызовет событие активации меняющее фокус - куда тогда щемиться с текущим событием мыши? Придется опять поизучать исходники. Название: Re: Виджет с поведением окна Отправлено: kai666_73 от Июнь 19, 2014, 22:17 Дынамично? - флаг в руки, добавляешь - вешай фильтр.
А насчет реализации - можно, наверно, как-то так Код: bool MyAutoRaiseWidget::eventFilter(QObject *obj, QEvent *event) Название: Re: Виджет с поведением окна Отправлено: GreatSnake от Июнь 20, 2014, 09:44 Как-то "несообразно" - цель довольно мелкая, а тут "целое наследование" Почему ???Всё делается просто, вот компилируемый пример ( Qt4.8 ): Код
Название: Re: Виджет с поведением окна Отправлено: Igors от Июнь 20, 2014, 10:51 Элегантный примерчик, спасибо.
Код
Название: Re: Виджет с поведением окна Отправлено: GreatSnake от Июнь 20, 2014, 10:54 Тогда может еще лучше навесить один такой фильтр и в нем искать парента с типом MyWindow? Ну да, в top-level окне. |