Название: Два класса QWidget и общий StyleSheet Отправлено: SerginhoLD от Ноябрь 02, 2012, 14:12 Есть главный класс приложения Widget и есть еще один класс WidgetAbout
В widget.h : Код
В widget.cpp в функции создания Widget() : Код
В том же классе Widget есть функция которая загружает CSS стили из файла, все работает, писать не буду :) Есть одна маленькая проблема, что у WidgetAbout я не могу сделать Background через этот файл. Например есть в файле запись Код: QLabel { color: red;} Но я не могу сделай фон WidgetAbout, я уже перебрал все возможные варианты, пробовал добавить класс widgetAbout->setProperty("class", "slide");, но не получается Перебрал все что пришло в голову: Код: QWidget.slide, WidgetAbout, WidgetAbout.slide, widgetAbout.slide, widgetAbout, Widget.slide { background-color: #fff;} Если конечно идти в лоб и файле widget.cpp сделать такие изменения, то естественно все работает: Код
Как решить эту проблему? p.s. проект во вложении Название: Re: Два класса QWidget и общий StyleSheet Отправлено: Bepec от Ноябрь 02, 2012, 18:36 Ответ с налёта - ваше "SlidingStackedWidget" не даёт виджету отрисовывать styleSheet. Даже с установленным ему в конструкторе, неизменяемом styleSheet'e у него отрисовывается стандартная палитра.
Название: Re: Два класса QWidget и общий StyleSheet Отправлено: SerginhoLD от Ноябрь 02, 2012, 19:18 Ответ с налёта - ваше "SlidingStackedWidget" не даёт виджету отрисовывать styleSheet. Даже с установленным ему в конструкторе, неизменяемом styleSheet'e у него отрисовывается стандартная палитра. если бы SlidingStackedWidget было "мое" :-\, я этот класс нашел на сайте разработчиков nokia, больше ничего подобного не видел, а мне нужен так называемый "слайдер" Название: Re: Два класса QWidget и общий StyleSheet Отправлено: Bepec от Ноябрь 02, 2012, 19:57 Послезавтра буду свободен - мб посмотрю что там творится с СSS. Не раньше.
Название: Re: Два класса QWidget и общий StyleSheet Отправлено: mitrich от Ноябрь 06, 2012, 15:34 SlidingStackedWidget тут не при чем.
Где-то в документации по QSS было написано примерно следующее: если класс унаследован от QWidget и на нем предполагается использовать QSS, необходимо переопределить ему paintEvent, в данном случае так: Код После чего всё работает: Код
Название: Re: Два класса QWidget и общий StyleSheet Отправлено: Bepec от Ноябрь 06, 2012, 15:37 Ээээ... Помоему вы только что убили стиль приложения и отрисовали стандартный стиль, не?
Хз. Найдёте это место - скиньте ссылочку, будет что почитать. Название: Re: Два класса QWidget и общий StyleSheet Отправлено: xokc от Ноябрь 06, 2012, 17:29 Ээээ... Помоему вы только что убили стиль приложения и отрисовали стандартный стиль, не? Нет. Это он отрисовал стандартные стилевые элементы, характерные для QWidget (рамку, фон, и т.п.) с учётом spacing, margin и т.п.Хз. Найдёте это место - скиньте ссылочку, будет что почитать. Тут: http://qt-project.org/doc/qt-4.8/stylesheet-reference.html (Перед "List of Properties") If you subclass from QWidget, you need to provide a paintEvent for your custom QWidget as below: Код The above code is a no-operation if there is no stylesheet set. Название: Re: Два класса QWidget и общий StyleSheet Отправлено: Bepec от Ноябрь 06, 2012, 19:18 Ээээ... Помоему вы только что убили стиль приложения и отрисовали стандартный стиль, не? Нет. Это он отрисовал стандартные стилевые элементы, характерные для QWidget (рамку, фон, и т.п.) с учётом spacing, margin и т.п.Помоему мы об одном говорим. Он убил бы другой стиль, который был установлен и установил/отрисовал стиль по умолчанию. В принципе нормально, если не планируется использование QStyle. PS спасибо за ссыль, просветлюсь. Название: Re: Два класса QWidget и общий StyleSheet Отправлено: _OLEGator_ от Ноябрь 06, 2012, 21:19 to mitrich:
Совершенно не обязательно. Проект во вложении. Название: Re: Два класса QWidget и общий StyleSheet Отправлено: Bepec от Ноябрь 06, 2012, 22:53 _OLEGator_ , помоему у вас просто отнаследованный виджет. А тут более закавычная ситуация вроде )
Название: Re: Два класса QWidget и общий StyleSheet Отправлено: _OLEGator_ от Ноябрь 07, 2012, 08:54 Bepec, я про это:
Где-то в документации по QSS было написано примерно следующее: если класс унаследован от QWidget и на нем предполагается использовать QSS, необходимо переопределить ему paintEvent Название: Re: Два класса QWidget и общий StyleSheet Отправлено: Bepec от Ноябрь 07, 2012, 09:41 Да, в этом ты прав. Но тут поднимается какая то более общая тема - на MainWindow виджет контейнер, в котором находится отнаследованный QWidget. И вот именно на нём CSS не применяется без дополнительного шаманизма :)
Название: Re: Два класса QWidget и общий StyleSheet Отправлено: mitrich от Ноябрь 07, 2012, 14:42 _OLEGator_, в твоем примере точно такая же ситуация как и у SerginhoLD: вызываем непосредственно для виджета
Код - работает, вызываем для родительского виджета или QApplication Код - не работает. Название: Re: Два класса QWidget и общий StyleSheet Отправлено: _OLEGator_ от Ноябрь 07, 2012, 14:49 to mitrich:
да, не работает, но и добавление приведенного вами кода не дает никакого эффекта. Название: Re: Два класса QWidget и общий StyleSheet Отправлено: Bepec от Ноябрь 07, 2012, 15:48 Хм. Проверю ка я.
В моём проекте - Кхм... А у меня всё работает :/ И без дополнительных телодвижений типа paintEvent... Бред какой то. Название: Re: Два класса QWidget и общий StyleSheet Отправлено: _OLEGator_ от Ноябрь 07, 2012, 16:07 Все понятно, надо добавить макрос Q_OBJECT к классу, тогда все работает.
Никаких ненужных переопределений paintEvent не надо. Название: Re: Два класса QWidget и общий StyleSheet Отправлено: mitrich от Ноябрь 07, 2012, 16:36 Да, действительно так работает.
А вот если этот унаследованный виджет запихнуть в другой, тогда уже не работает и надо переопределять paintEvent . |