Название: Изменение формы окна силами CSS - возможно ли? Отправлено: schmidt от Март 20, 2013, 09:10 В проекте нужно реализовать всплывающие немодальные уведомления поверх главного окна в форме контейнера со скругленными углами. Бросаться в первую очередь за paintEvent и отрисовывать/считать все "методом изобретения велосипеда" нет никакого желания :) Хочется поручить всю работу таблицам стилей.
Пошел таким путем: нарисовал в дизайнере виджет с вложенным фреймом, к которому применил CSS: Код: background-color: rgb(0, 170, 255); Теперь хочу чтобы сам виджет не отрисовывался, а рисовался только стилизованный фрейм. Однако, если я устанавливаю виджету атрибут Qt::WA_TranslucentBackground - вообще ничего не отрисовывается - ни виджет, ни фрейм. Может есть какой-то способ заставить явно отрисовываться потомков виджета в то время как сам он пребывал бы в состоянии TranslucentBackground ? ui->frame->show() проблему не решает :) Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: Bepec от Март 20, 2013, 09:22 Скорее всего нет.
Нельзя изменить форму окна силами CSS. НО! Можно задать фигурную форму окна маской (оно будет фигурным, как тебе надо) и уже дальше на нём всякую гадость творить/рисовать. PS Без дополнительных телодвижений не изменить. CSS в Qt это оформление. PPS перенести бы тему в QSS. Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: _OLEGator_ от Март 20, 2013, 09:28 Необходимо также указать окну Qt::FramelessWindowHint
Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: _OLEGator_ от Март 20, 2013, 09:42 to Bepec:
Код
Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: Bepec от Март 20, 2013, 09:49 А разве установка этого флага не создаёт маску?
Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: _OLEGator_ от Март 20, 2013, 10:02 Qt::WA_TranslucentBackground - Indicates that the widget should have a translucent background, i.e., any non-opaque regions of the widgets will be translucent because the widget will have an alpha channel. Setting this flag causes WA_NoSystemBackground to be set. On Windows the widget also needs the Qt::FramelessWindowHint window flag to be set. This flag is set or cleared by the widget's author.
Имхо, маска - это другое: Код
Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: Bepec от Март 20, 2013, 10:20 Ну не буду спорить. Так то равнозначные функции. Но решение проще, чем установка маски.
Очень рад, что получается так сделать :D Возможно использую в следующих проектах. Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: GreatSnake от Март 20, 2013, 11:35 Ну не буду спорить. Так то равнозначные функции. Но решение проще, чем установка маски. С чего это вдруг по своей сути совершенно разные функции стали равнозначными ???Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: Bepec от Март 20, 2013, 12:01 Кхм. Я имел в виду, что результат, необходимый ТСсу может быть получен как той, так и иной функцией.
Ну и не вижу большой разницы в создании маски по крайним пикселям и добавлением прозрачности той области виджета, в котором отсутствует фон (во всяком случае я себе так представляю работу этого флага). Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: GreatSnake от Март 20, 2013, 12:07 По умолчанию все окна имеют прямоугольную форму.
Единственный способ изменить форму - это указать граф.системе его границы через QWidget::setMask(). Прозрачность же работает в пределах заданной формы окна. Так что это вещи из разных опер) Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: Bepec от Март 20, 2013, 12:18 Кхм. То же самое, что конфигуратор и редактор конфигурационных файлов.
Форма окна при использовании этого флага тоже меняется. Визуально. Так же как и при использовании setMask. Не? Ибо это в любом случае прямоугольное окно с прозрачностью в нужных местах. Не помню какой именно способ (то ли флаг, то ли mask), но помоему setMask и фигурная форма окна при зависании выдаёт чёрный прямоугольник :D Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: GreatSnake от Март 20, 2013, 12:29 Мде, как же ты любишь разглагольствовать о вещах совершенно не разбираясь в их предметной области.
Да будет тебе известно, окно является ресурсом граф.системы и его формой она же и заведует причём независимо от активности приложения. Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: _OLEGator_ от Март 20, 2013, 13:39 И setMask, насколько я помню, не дает возможности задавать полупрозрачные области, либо полностью прозрачно, либо нет.
Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: GreatSnake от Март 20, 2013, 13:44 И setMask, насколько я помню, не дает возможности задавать полупрозрачные области, либо полностью прозрачно, либо нет. О какой полупрозрачности вообще можно рассуждать при 1-битовой маске, задача которой описать границы окна ???Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: Bepec от Март 20, 2013, 13:54 Ну вот я свои заблуждения развеиваю потихоньку :)
"Единственное, что человек делает всегда искренне, — заблуждается." Хань Сян-цзы © Название: Re: Изменение формы окна силами CSS - возможно ли? Отправлено: schmidt от Март 21, 2013, 09:32 Ход мыслей был такой:
1. "Спрятать" окно/виджет верхнего уровня, установив TranslucentBackground. 2. Явно заставить отрисоваться всех потомков виджета. Но, я плохо понимаю, что значит Цитировать i.e., any non-opaque regions of the widgets will be translucent because the widget will have an alpha channel. ибо после установки атрибута Qt::WA_TranslucentBackground перестает отрисовываться вообще что-либо от виджета - ни его самого, ни потомков, ни даже рамки окна. |