QGraphicsView::NoViewportUpdate 不起作用



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

我该如何解决这个问题?

这是代码:主窗口.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

mainwindow.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);
}

我"解决"了这个问题。我发现,如果用鼠标悬停(例如)视口,则视口不会更新。所以,如果不进行交互,视口就不会更新。但是,如果在qGraphicsView中使用鼠标滚轮滚动,则视口不会更新。

相关内容

  • 没有找到相关文章

最新更新