我有一个非常简单的窗口,里面有一个QGraphicsView
、一个QGraphicsScene
内部和一个简单的QPushButton
。当用户单击按钮时,应在场景中添加一条线。但是,由于我设置QGraphicsView::NoViewportUpdate
了 ,因此不应显示该行。相反,该行被显示。根据文档,QGraphicsView
当场景改变时,永远不会更新它的视口;用户应控制所有更新。此模式禁用 QGraphicsView 中的所有(可能很慢)项目可见性测试,适用于需要固定帧速率或视口在外部更新的场景。
我该如何解决这个问题?
这是代码: mainwindow.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
主窗口.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);
}