我有一个自定义的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());
我的理解是,这不应该是必要的。在我的程序中似乎不需要其他小部件。我可能做错什么会阻止它工作?
答案 0 :(得分: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");
为什么好?您可以使用所有元素的设置编写特殊的styleSheet,将其保存为文件,将其放入资源并使用它,它很容易调试,因为您的样式表放在一个地方,
答案 1 :(得分:1)
事实证明MyWidget在某些时候被重新定位,并且新的父母有一个流氓样式表,它覆盖了主级联样式表。删除该中间样式表会导致所有内容重新开始工作。