Възможно ли е да се използват Qt Style Sheets с популяризирани джаджи в Qt Creator?

Опитвам се да направя сериозно препроектиране на стандартни уиджети, използвайки Qt Style Sheets. И така, след като направих по-голямата част от това ръчно за различни уиджети от #objectName селектори, реших да групирам подобни уиджети по някакъв начин.

Например, имам множество QFrames, които действат като заглавки във вътрешни форми. И искам всички те да имат една и съща таблица със стилове. Един от начините да направите това е да използвате конвенцията за именуване (това е моят резервен вариант), т.е. QFrame[objectName|="prefix_"]. Но исках да групирам своите джаджи по клас. Така че създадох прост клас заместител:

class HeaderFrame: public QFrame
{
public:
    HeaderFrame(QWidget *parent = NULL): QFrame(parent) {}
};

Което ми позволи да популяризирам всички тези QFrames до HeaderFrames. След това се опитах да настроя

HeaderFrame { background-color: red; }

stylesheet към самия обект MainWindow (за да го накара да действа върху всички HeaderFrames), но няма да работи. Нищо не се променя в дизайнера на формуляри QtCreator и нищо не се променя след компилиране на приложение. Опитах различни варианти на този стилов лист, но нищо не работи.

И така, само Qt widgets (като QLabel, QFrame и т.н.) достъпни ли са за стилизиране по този начин? Или има някакъв начин да напишете таблица със стилове за вашата рекламирана джаджа?


person elricbk    schedule 30.06.2011    source източник


Отговори (2)


да, възможно е. Единственото нещо, което трябва да имате предвид - основата за вашите извлечени джаджи трябва да поддържа таблици със стилове и внимателно да имплементирате повторно PaintEvent.

UPD: примерен клас:

class Header1Label : public QLabel
{
    Q_OBJECT
    public:
    Header1Label(QWidget *parent = 0):QLabel(parent){};
    ~Header1Label(){};
};

стилов лист:

Header1Label
{
    font-size:14px;
    font-weight:900;    
}
person Raiv    schedule 30.06.2011
comment
Тогава как да го направя? Изобщо не внедрявам отново paintEvent(), така че ще се използва QFrame::paintEvent(), което перфектно работи със стилови таблици. Всичко, което искам, е да групирам таблиците със стилове по името на класа на популяризираните модули, както е показано във въпроса. - person elricbk; 30.06.2011
comment
като с вградените джаджи. По имената на класовете им. - person Raiv; 30.06.2011
comment
@Raiv Да, прав си за забравянето на макроса Q_OBJECT. За съжаление така или иначе няма да покаже приложен лист със стилове в дизайнера на формуляри QtCreator. Така че трябва да използвам резервен вариант със селектор на префикси на имена. - person elricbk; 30.06.2011
comment
Можете да ги видите в работещата програма, самият qt creator няма да го покаже. - person Raiv; 30.06.2011
comment
да По този начин би било много по-трудно да се направи фин дизайн на приложението. - person elricbk; 30.06.2011
comment
премахнах стилови листове от моя код в отделен файл. Така че мога да ги редактирам и просто да рестартирам приложението си. без преустройство. Може да опитате и това... Това също ще ви позволи да създавате кожи само с промяна на този файл, ако има смисъл. - person Raiv; 30.06.2011

Винаги можете да добавите class-name към свойството на класа на обекта, което е QStringList, и да използвате селектор .class-name.

person anion155    schedule 21.12.2015