自定义QWidget不继承父样式表

时间:2014-09-17 13:12:25

标签: c++ linux qt5.2

我有一个自定义的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());

我的理解是,这不应该是必要的。在我的程序中似乎不需要其他小部件。我可能做错什么会阻止它工作?

2 个答案:

答案 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在某些时候被重新定位,并且新的父母有一个流氓样式表,它覆盖了主级联样式表。删除该中间样式表会导致所有内容重新开始工作。