Применить другую таблицу стилей QSS для пользовательского класса QT - PullRequest
0 голосов
/ 10 декабря 2018

Я использую таблицу стилей qss для моего графического интерфейса.Это работает хорошо, но я хотел бы определить другую таблицу стилей для моего пользовательского виджета.Например, стиль QPushbutton работает хорошо, но я хотел бы применить другой стиль для MyQPushButton (расширяется от QPushButton).

Я пробовал что-то вроде этого:

MyQPushButton
{
    color: #dcdcdc;
    // some code here
}

QPushButton
{
    color: #b1b1b1;
    // some code here
}

Но стиль QPushButton был применен к MyQPushButton.Как переопределить это поведение?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Ozan Yurtsever ответы работают, но это плохая практика.
Вы не должны использовать имена объектов для таблицы стилей, кроме случаев, когда вы хотите стилизовать очень уникальный виджет в вашемприложение.Он подвержен ошибкам и более многословен.

Таблицы стилей Qt уже позволяют то, что вы хотите по умолчанию, вы можете перезаписать стиль для подклассов (см. Конец этой части документа ).
Как сказано в документе, порядок объявлений в таблице стилей имеет значение, поэтому ваша таблица стилей должна быть:

QPushButton
{
    color: #b1b1b1;
    // some code here
}
MyQPushButton
{
    color: #dcdcdc;
    // some code here
}

В противном случае стиль QPushButton будет переопределять стиль MyQPushButton, потому что MyQPushButton также является QPushButton.

Также возможно ограничить область действия вашего стиля только классом, а не подклассами с .QPushButton { /*some code*/ }, см. документ о селекторах .

Последний совет, у меня были проблемы с таблицей стилей, не работающей для подкласса, проверьте, не забыли ли вы макрос Q_OBJECT в подклассе.

0 голосов
/ 10 декабря 2018

Если вы хотите стилизовать определенный элемент в вашем проекте, вы можете использовать его следующим образом:

QPushButton#MyQPushButton
{
    color: #dcdcdc;
    // some code here
}

Я предполагаю, что вы уже назвали свой новый QPushButton объект как MyQPushButton, вы можете назвать элемент следующим образом:

QPushButton* myButton = new QPushButton;
myButton->setObjectName("MyQPushButton");

Не называя свой элемент, вы не сможете получить к нему доступ, чтобы придать ему переопределенный стиль.

...