改变QWidget的背景色

时间:2023-02-04 19:16:14
我将一个QWidget 嵌入到另外一个QWidget 内

        QWidget *back = new QWidget() 
        QWidget * test = new QWidget(this);
        back->setGeometry(0,0,800,35);
test->setGeometry(0,20,800,35);
QPalette palette;
palette.setColor(QPalette::Background, QColor(227,228,228));
test->setPalette(palette);
        back->show();

这样 内嵌的那个QWidget 的背景色根本不会变
但如果 不内嵌 单独显示 背景色是变的,如何解决啊?

5 个解决方案

#1


test->setStyleSheet("background-color:#FF00FF");

这样可以设置。。。内嵌Widget
QWidget *test;
 test = new QWidget(this);
    QPushButton *p = new QPushButton(tr("Widget"),test);
    QPushButton *p1 = new QPushButton(tr("Widget1"),test);
    connect(p1,SIGNAL(clicked()),this,SLOT(OnColorClicked())); //test->setStyleSheet
    QVBoxLayout *vBox = new QVBoxLayout;
    vBox->addWidget(p);
    vBox->addWidget(p1);
    test->setLayout(vBox);
    vBox = new QVBoxLayout;
    vBox->addWidget(pBut);
    vBox->addWidget(test); //内嵌
    setLayout(vBox);

#2


原因在于只有最外层的widget才能使用setPalette(palette)来设置背景图和背景色。
内嵌的widget需要用的别的方式,比如setStyleSheet,比如QPainter去draw 等等

#3


引用 1 楼  的回复:
test->setStyleSheet("background-color:#FF00FF");

这样可以设置。。。内嵌Widget
QWidget *test;

C/C++ code
 test = new QWidget(this);
    QPushButton *p = new QPushButton(tr("Widget"),test);
    QPushButt……

这样不行我试过了,我内嵌的widget有大量的元素要用qss来设置 这样一搞全城背景了

#4


引用 2 楼  的回复:
原因在于只有最外层的widget才能使用setPalette(palette)来设置背景图和背景色。
内嵌的widget需要用的别的方式,比如setStyleSheet,比如QPainter去draw 等等

我明天试试重绘的方法

#5


引用 4 楼  的回复:
引用 2 楼  的回复:
原因在于只有最外层的widget才能使用setPalette(palette)来设置背景图和背景色。
内嵌的widget需要用的别的方式,比如setStyleSheet,比如QPainter去draw 等等

我明天试试重绘的方法


嗯,如果不想元素继承背景,paintEvent肯定没问题的

#1


test->setStyleSheet("background-color:#FF00FF");

这样可以设置。。。内嵌Widget
QWidget *test;
 test = new QWidget(this);
    QPushButton *p = new QPushButton(tr("Widget"),test);
    QPushButton *p1 = new QPushButton(tr("Widget1"),test);
    connect(p1,SIGNAL(clicked()),this,SLOT(OnColorClicked())); //test->setStyleSheet
    QVBoxLayout *vBox = new QVBoxLayout;
    vBox->addWidget(p);
    vBox->addWidget(p1);
    test->setLayout(vBox);
    vBox = new QVBoxLayout;
    vBox->addWidget(pBut);
    vBox->addWidget(test); //内嵌
    setLayout(vBox);

#2


原因在于只有最外层的widget才能使用setPalette(palette)来设置背景图和背景色。
内嵌的widget需要用的别的方式,比如setStyleSheet,比如QPainter去draw 等等

#3


引用 1 楼  的回复:
test->setStyleSheet("background-color:#FF00FF");

这样可以设置。。。内嵌Widget
QWidget *test;

C/C++ code
 test = new QWidget(this);
    QPushButton *p = new QPushButton(tr("Widget"),test);
    QPushButt……

这样不行我试过了,我内嵌的widget有大量的元素要用qss来设置 这样一搞全城背景了

#4


引用 2 楼  的回复:
原因在于只有最外层的widget才能使用setPalette(palette)来设置背景图和背景色。
内嵌的widget需要用的别的方式,比如setStyleSheet,比如QPainter去draw 等等

我明天试试重绘的方法

#5


引用 4 楼  的回复:
引用 2 楼  的回复:
原因在于只有最外层的widget才能使用setPalette(palette)来设置背景图和背景色。
内嵌的widget需要用的别的方式,比如setStyleSheet,比如QPainter去draw 等等

我明天试试重绘的方法


嗯,如果不想元素继承背景,paintEvent肯定没问题的