Qt QWidget设置了背景色后使用paintEvent绘制边框无效
在Qt中,如果你设置了QWidget的背景色后,想要在paintEvent中绘制边框,可能会出现无效的情况。这是因为QWidget在绘制时会先绘制背景色,然后再绘制边框,所以边框会被背景色覆盖。
要解决这个问题,可以通过两种方式来实现:
- 在paintEvent中先调用父类的paintEvent方法,然后再绘制边框。这样可以保证边框在背景色之上绘制。
void MyWidget::paintEvent(QPaintEvent *event)
{
// 调用父类的paintEvent方法
QWidget::paintEvent(event);
QPainter painter(this);
painter.setPen(QPen(Qt::black, 2)); // 设置边框的颜色和宽度
painter.drawRect(rect());
}
- 在QWidget的构造函数中设置背景色为透明,并且设置Qt::WA_TranslucentBackground属性。然后在paintEvent中绘制背景色和边框。
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
setAttribute(Qt::WA_TranslucentBackground); // 设置透明背景
setStyleSheet("background-color: transparent;"); // 设置背景色为透明
}
void MyWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.fillRect(rect(), Qt::white); // 绘制背景色
painter.setPen(QPen(Qt::black, 2)); // 设置边框的颜色和宽度
painter.drawRect(rect());
}
这两种方法都可以解决在设置了背景色后使用paintEvent绘制边框无效的问题。你可以根据具体的需求选择使用其中的一种方法
原文地址: https://www.cveoy.top/t/topic/iO91 著作权归作者所有。请勿转载和采集!