首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QGraphicsView::NoViewportUpdate不工作

QGraphicsView::NoViewportUpdate不工作
EN

Stack Overflow用户
提问于 2016-01-05 16:15:30
回答 1查看 274关注 0票数 0

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

我该如何解决这个问题?

下面是代码:mainwindow.h

代码语言:javascript
复制
#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

mainwindow.cpp

代码语言:javascript
复制
#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);
}
EN

回答 1

Stack Overflow用户

发布于 2016-01-15 19:23:56

我“解决了”了。我发现,如果不使用鼠标悬停(例如),则无法更新viewport。因此,如果您不进行交互,则viewport不会更新。但是,如果在qGraphicsView中使用鼠标滚轮滚动,则视图不会更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34616267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档