qt qwidget的设置背景不管用,以及在python和c++上的解决方法

在Qt5中,当使用QWidget时,直接设置样式表(stylesheet)可能无效。对于C++,需要重写paintEvent事件来实现背景显示。而在Python环境下,相同的方法却无法奏效。解决Python中的问题,需要删除UI文件中QWidget的stylesheet,并在代码中设置,以避免UI界面和代码设置冲突。确保将qrc文件转换为Python导入,以防止资源找不到。

首先是c++

因为qwidget绘制时默认不绘制自己的stylesheet,所以要对qwidget的paintevent事件进行重写,
下面是c++上的代码

头文件

#include <QWidget>
#include <QPainter>//引入绘制头文件
#include <QStyleOption>
namespace Ui {
class BatteryUi2;
}

class BatteryUi2 : public QWidget
{
    Q_OBJECT

public:
    explicit BatteryUi2(QWidget *parent = nullptr);
    void paintEvent(QPaintEvent *e);//重写方法
    ~BatteryUi2();

private:
    Ui::BatteryUi2 *ui;
};

cpp文件

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

重写后,只要在qtdesigener页面设置stylesheet即可显示

python

但是该方法在python上不起作用

from PyQt5 import QtCore, QtGui, QtWidgets
from batteryui2 import Ui_BatteryUi2
import ui2

class BatteryUi2(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(BatteryUi2, self).__init__(parent)
        ui = Ui_BatteryUi2()
        ui.setupUi(self)


    def paintEvent(self, a0: QtGui.QPaintEvent):
        opt = QtWidgets.QStyleOption();
        opt.initFrom(self)
        painter = QtGui.QPainter(self)
        self.style().drawPrimitive(QtWidgets.QStyle.PE_Widget,opt,painter,self)

虽然写的过程跟c++一模一样,但是在python上运行仍然不出现stylesheet,具体原因还不知道,接下来给出解决办法
首先,在Ui.py把qwidget里设置stylesheet的地方删掉,只删除父widget就行,然后在代码里设置stylesheet即可,因为ui界面和代码设置会有冲突,不执行代码的,所以一定要把ui里面的stylesheet删掉!!!

    def __init__(self, parent=None):
        super(BatteryUi2, self).__init__(parent)
        ui = Ui_BatteryUi2()
        ui.setupUi(self)
        self.setStyleSheet("#BatteryUi2 {border-image: url(:/resourse/ui2/u3_bg.png);}")//在代码里面设置



    def paintEvent(self, a0: QtGui.QPaintEvent):
        opt = QtWidgets.QStyleOption();
        opt.initFrom(self)
        painter = QtGui.QPainter(self)
        self.style().drawPrimitive(QtWidgets.QStyle.PE_Widget,opt,painter,self)

最后即可成功运行,记得把qrc文件转化为py引入,否则会找不到。
踩的一个坑,贼难受

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值