在Qt中,如果你设置了QWidget的背景色后,想要在paintEvent中绘制边框,可能会出现无效的情况。这是因为QWidget在绘制时会先绘制背景色,然后再绘制边框,所以边框会被背景色覆盖。

要解决这个问题,可以通过两种方式来实现:

  1. 在paintEvent中先调用父类的paintEvent方法,然后再绘制边框。这样可以保证边框在背景色之上绘制。
void MyWidget::paintEvent(QPaintEvent *event)
{
    // 调用父类的paintEvent方法
    QWidget::paintEvent(event);

    QPainter painter(this);
    painter.setPen(QPen(Qt::black, 2)); // 设置边框的颜色和宽度
    painter.drawRect(rect());
}
  1. 在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绘制边框无效的问题。你可以根据具体的需求选择使用其中的一种方法

Qt QWidget设置了背景色后使用paintEvent绘制边框无效

原文地址: https://www.cveoy.top/t/topic/iO91 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录