qgraphicsview刷新_如何刷新QGraphicsView以显示QGraphicsScene背景中的更改

我有自定义QGraphicsView和QGraphicsScene。在QGraphicsScene内部我覆盖了void drawBackground(QPainter *painter, const QRectF &rect)并基于布尔标志我想要打开和关闭网格。我尝试在我的函数中调用clear()或调用painter eraseRect(sceneRect()),但它没有用。所以在做了一些阅读之后,我想它不应该工作,因为在更改场景后你需要刷新视图。这就是我发出名为signalUpdateViewport()的信号的原因

void Scene::drawBackground(QPainter *painter, const QRectF &rect) {

if(this->gridEnabled) {

// Draw grid

}

else {

// Erase using the painter

painter->eraseRect(sceneRect());

// or by calling

//clear();

}

// Trigger refresh of view

emit signalUpdateViewport();

QGraphicsScene::drawBackground(painter, rect);

}

然后由我的观点捕获:

void View::slotUpdateViewport() {

this->viewport()->update();

}

毋庸置疑,这并不奏效。 不起作用我的意思是只有在更改窗口小部件时才会显示结果(无论是场景内部还是视图内部的刷新),例如触发调整大小事件。

如何正确刷新场景视图以显示我在场景背景中所做的更改?

代码:

scene.h

#ifndef SCENE_HPP

#define SCENE_HPP

#include

class View;

class Scene : public QGraphicsScene

{

Q_OBJECT

Q_ENUMS(Mode)

Q_ENUMS(ItemType)

public:

enum Mode { Default, Insert, Select };

enum ItemType { None, ConnectionCurve, ConnectionLine, Node };

Scene(QObject* parent = Q_NULLPTR);

~Scene();

void setMode(Mode mode, ItemType itemType);

signals:

void signalCursorCoords(int x, int y);

void signalSceneModeChanged(Scene::Mode sceneMode);

void signalSceneItemTypeChanged(Scene::ItemType sceneItemType);

void signalGridDisplayChanged(bool g

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值