我想在我的 QGraphicsScene 中提供背景顏色。為此,我重寫了 drawBackground() 方法,并嘗試設定顏色,但它不起作用。背景顏色沒有改變。
這是我的 drawBackground() 方法。
小部件.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);
};
小部件.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();
}
誰能幫我 ?
uj5u.com熱心網友回復:
您的代碼存在許多問題,或者至少存在不一致之處。首先,您的Widget類同時使用繼承和組合,QGraphicsView因為它派生自QGraphicsView并具有QGraphicsView成員。這可能是您想要的,但似乎不太可能。
首先,你說...
我想為 ui->verticalLayout_2 設定背景。所以我的背景應該是黃色的。
根據我的評論,只需使用QGraphicsView::setBackgroundBrush...
view->setBackgroundBrush(Qt::yellow);
另一個問題是你drawBackground在Widget課堂上的覆寫。目前你有...
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();
}
[順便說一句,在派生類中重寫虛擬成員時,請始終使用說明override符。]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/429959.html
