如何更改 QGraphicsScene 中的背景颜色?

How to change background color in QGraphicsScene?

我想在我的 QGraphicsScene 中提供背景颜色。为此,我重写了 drawBackground() 方法,并尝试设置颜色,但它不起作用。背景颜色没有改变。
这是我的 drawBackground() 方法。

Widget.h

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QGraphicsView
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
protected:
    void drawBackground(QPainter *painter, const QRectF &rect);    
};      
     

Widget.cpp

    Widget::Widget(QWidget *parent)
        : QGraphicsView(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        scene = new QGraphicsScene(this);
    
        view = new QGraphicsView(this);
        view->setScene(scene);
        view->setDragMode(QGraphicsView::RubberBandDrag);
        ui->verticalLayout_2->addWidget(view);
    }
    
   void Widget::drawBackground(QPainter *painter, const QRectF &rect)
   {
       painter->save();
       painter->setBrush(QBrush(Qt::yellow));
       painter->restore();
   }
     
  

谁能帮帮我?

您的代码有很多问题,或者至少是不一致。首先,您的 Widget class 使用继承 关于 QGraphicsView 的组合,因为它派生自 QGraphicsView 并且具有QGraphicsView 成员。这可能是您想要的,但似乎不太可能。

首先,你说...

I want to set background for the ui->verticalLayout_2. So my background should be yellow.

根据我的评论,只需使用 QGraphicsView::setBackgroundBrush...

即可轻松完成
view->setBackgroundBrush(Qt::yellow);

另一个问题是您在 Widget class 中覆盖了 drawBackground。目前你有...

void Widget::drawBackground(QPainter *painter, const QRectF &rect)
{
    painter->save();
    painter->setBrush(QBrush(Qt::yellow));
    painter->restore();
}

但这只是保存画家的状态,将画笔设置为纯黄色,然后恢复画家的状态。它本质上是一个 noop,因为它实际上并没有绘制任何东西。如果您真的想以这种方式覆盖 drawBackground 成员,请尝试类似...

void Widget::drawBackground(QPainter *painter, const QRectF &rect)
{
    painter->save();
    painter->setPen(Qt::NoPen);
    painter->setBrush(QBrush(Qt::yellow));
    painter->drawRect(rect);
    painter->restore();
}

[顺便说一句,在派生 class 中覆盖虚拟成员时,始终使用 override 说明符。]