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

您所在的位置:网站首页 设置页面背景图像的方法包括 QWidget派生类对象作为子窗口(父窗口设置了样式)背景为透明问题

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

2024-07-14 23:23| 来源: 网络整理| 查看: 265

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

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

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

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);

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3