在 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 设置背景色后绘制边框无效的解决方案

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

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