У меня есть собственный класс QWidget, который, кажется, не наследует таблицу стилей своего родителя, как я понимаю, должен. Я распечатываю родительскую таблицу стилей в конструкторе моего пользовательского класса, и это определенно правильный родитель с правильной таблицей стилей.
MyWidget::MyWidget(QWidget *parent_) :
QWidget(parent_)
{
std::cout << "parent is " << parent_->objectName().toStdString() << std::endl;
std::cout << "stylesheet is: " << parent_->styleSheet().toStdString() << std::endl;
Однако я обнаружил, что могу заставить его работать, если я вызову это в конструкторе:
setStyleSheet(parent_->styleSheet());
Насколько я понимаю, это не должно быть необходимым. Это не требуется для других виджетов в моей программе. Что я мог сделать неправильно, чтобы это не сработало?
Вы можете сделать это с одним styleSheet
,
Дайте вашему виджету подкласс objectName
:
widget->setObjectName("family");
widget_2->setObjectName("family");
Применять stylesheet
:
qApp->setStyleSheet(stylesheet);
где stylesheet
имеет следующий код:
#family
{
background-color: green
}
Все виджеты с именем семейного объекта получают это stylesheet
,
Если вы установите:
widget->setObjectName("family");//only this widget has stylesheet
widget_2->setObjectName("notFamily");
Почему это хорошо? Вы можете написать специальную таблицу стилей с настройками для всех элементов, сохранить ее как файл, поместить в ресурс и использовать, ее легко отлаживать, потому что ваши таблицы стилей размещены в одном месте,
Оказывается, в какой-то момент MyWidget переопределяется, и у нового родителя была мошенническая таблица стилей, которая переопределяла основную каскадную таблицу стилей. Удаление этой промежуточной таблицы стилей заставило все снова начать работать.