QWidget派生类对象作为子窗口(父窗口设置了样式)背景为透明问题

在项目中,我们经常需要自定义一个继承Qwidget派生类的类,当这个类的对象为独立窗口时,一点问题都没有。当我们作为子窗口时,qt会自动将子窗口的背景设置为透明(其他控件均显示),同时这个子窗口的setStyleSheet方法是无效的。有时候我们并不想这样做。于是需要重写paintEvent函数,并设置setBrush画刷,drawRect一个矩形来显示背景。但当软件中有换肤功能时,我们必须在切换皮肤时换颜色。这时候就显得非常的麻烦。

QWidget派生类对象作为子窗口(父窗口设置了样式)背景为透明问题_第1张图片

QWidget派生类对象作为子窗口(父窗口设置了样式)背景为透明问题_第2张图片

如何达到这个效果有三种方法:

第一种,在生成该界面之后,再调用一次

setAutoFillBackground(true);

如:

void Form::on_pushButton_clicked()
{
    setAutoFillBackground(true);
}

第二种是重写PaintEvent函数

void Form::paintEvent(QPaintEvent *e)
{
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

第三种是(推荐):该方式的结果是,如果父窗口设置了qss,就用父类的。如果自己设置了Qss就用自己的

setStyleSheet("background-color:rgb(0, 255, 127);color:red;");
setAttribute(Qt::WA_StyledBackground);

 

你可能感兴趣的:(QT基础知识)