1

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

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

4

2 回答 2

2

事实证明,MyWidget 在某个时候被重新设置了父级,并且新父级有一个流氓样式表,它覆盖了主级联样式表。删除该中间样式表会导致一切重新开始工作。

于 2014-09-17T16:33:02.763 回答
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");

为什么好?您可以为所有元素编写带有设置的特殊样式表,将其保存为文件,将其放入资源中并使用它,很容易调试,因为您的样式表放在一个地方,

于 2014-09-17T13:31:16.847 回答