Пользовательский QWidget не наследует родительскую таблицу стилей

У меня есть собственный класс 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());

Насколько я понимаю, это не должно быть необходимым. Это не требуется для других виджетов в моей программе. Что я мог сделать неправильно, чтобы это не сработало?

1

Решение

Вы можете сделать это с одним 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");

Почему это хорошо? Вы можете написать специальную таблицу стилей с настройками для всех элементов, сохранить ее как файл, поместить в ресурс и использовать, ее легко отлаживать, потому что ваши таблицы стилей размещены в одном месте,

1

Другие решения

Оказывается, в какой-то момент MyWidget переопределяется, и у нового родителя была мошенническая таблица стилей, которая переопределяла основную каскадную таблицу стилей. Удаление этой промежуточной таблицы стилей заставило все снова начать работать.

1

По вопросам рекламы [email protected]