更改“孩子的父母的样式表”后,如何将孩子的样式表重置为Qt默认样式表?

时间:2018-10-24 11:17:35

标签: c++ css visual-studio qt stylesheet

当我更改对象的样式表时,其子项的样式表也会更改。 如何将孩子的样式表重置为Qt默认样式? 为了对此进行测试,我使用以下代码:

在头文件中:

#include "ui_QtGuiApplication.h"
#include <QGraphicsView>
#include <QtWidgets/QPushButton>

class QtGuiApplication : public QMainWindow
{
    Q_OBJECT

public:
    QtGuiApplication(QWidget *parent = Q_NULLPTR);


private:
    Ui::QtGuiApplicationClass ui;
    QGraphicsView* qGraph;
    QGraphicsScene* scene;

};

在源文件中:

#include "QtGuiApplication.h"

QtGuiApplication::QtGuiApplication(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

    // Change centralWidget stylesheet      
    ui.centralWidget->setStyleSheet(
        "background:qlineargradient(x1 : 0, y1 : 0, x2 : 0, y2 : 1,\
        stop : 0  rgb(216, 0, 0), stop : 0.4 rgb(155, 0, 0),\
        stop : 0.4 rgb(155, 0, 0), stop : 1.0 rgb(216, 0, 0));");


    // creat a QGraphicsView an add it to centralWidget
    qGraph = new QGraphicsView(ui.centralWidget);
    qGraph->setGeometry(QRect(70, 30, 300, 300));
    scene = new QGraphicsScene(qGraph);
    scene->setSceneRect(0, 0, 300, 300);
    qGraph->setScene(scene);
    qGraph->show();

    // creat a push button and add it in to centralWidget
    QPushButton* btn_Ok = new QPushButton(ui.centralWidget);
    btn_Ok->setGeometry(QRect(340, 340, 75, 23));
    btn_Ok->setText("Ok");
    //below code doesn't work 
    btn_Ok->setStyleSheet("");
    btn_Ok->setStyleSheet(styleSheet());

}

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,childID 选择器帮我解决了这个问题。

例如,如果你想设置 btn_Ok 的样式,它是一个 QPushButton,你可以给它一个名字

btn_Ok->setObjectName("xxx");

并使用此名称通过

设置样式

ui.centralWidget->setStyleSheet("QPushButton#xxx{background: red;}");

这样,将设置样式的唯一按钮是btn_Ok

如果您想设置所有按钮的样式,这些按钮是您中央小部件的直接后代,您可以使用

ui.centralWidget->setStyleSheet("QWidget#centralWidget > QPushButton{background: red;}");