QGraphicsView::NoViewportUpdate 不起作用

Posted

技术标签:

【中文标题】QGraphicsView::NoViewportUpdate 不起作用【英文标题】:QGraphicsView::NoViewportUpdate doesn't work 【发布时间】:2016-01-05 16:15:30 【问题描述】:

我有一个非常简单的窗口,里面有一个QGraphicsView,一个QGraphicsScene,还有一个简单的QPushButton。当用户单击按钮时,应在场景中添加一条线。但是,由于我设置了QGraphicsView::NoViewportUpdate,因此不应显示该行。相反,该行被显示。 根据文档,QGraphicsView 永远不会在场景变化时更新其视口;用户应控制所有更新。 此模式禁用 QGraphicsView 中的所有(可能很慢)项目可见性测试,适用于需要固定帧速率或视口在外部更新的场景

我该如何解决这个问题?

代码如下: ma​​inwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QGraphicsScene>
#include <QGraphicsView>
#include <QWidget>
#include <QPushButton>

class MainWindow : public QWidget

  Q_OBJECT

  public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

  private:
    QGraphicsView* view;
    QGraphicsScene* scene;
    QPushButton* b;

    public slots:
    void start();
;

#endif // MAINWINDOW_H

ma​​inwindow.cpp

#include "mainwindow.h"

#include <QVBoxLayout>

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)

  scene = new QGraphicsScene(0, 0, 400, 400);
  view = new QGraphicsView(scene);
  view->setViewportUpdateMode(QGraphicsView::NoViewportUpdate);

  b = new QPushButton("Start");
  connect (b, &QPushButton::clicked, this, &MainWindow::start);

  QVBoxLayout* layout = new QVBoxLayout;
  layout->addWidget(view);
  layout->addWidget(b);
  setLayout(layout);


MainWindow::~MainWindow()



void MainWindow::start()

  scene->addLine(0, 0, 200, 200);

【问题讨论】:

【参考方案1】:

我“解决了”这个问题。我发现如果您使用鼠标悬停(例如)NOT,则视口不会更新。因此,如果您不进行交互,则视口不会更新。但是,如果您在 qGraphicsView 内使用鼠标滚轮滚动,视口不会更新。

【讨论】:

以上是关于QGraphicsView::NoViewportUpdate 不起作用的主要内容,如果未能解决你的问题,请参考以下文章