QGraphicsView用法教训

我做了一个例子,窗体上有一个按钮,还有一个widget。

希望一点按钮,就在widget总显示QGraphicsView。

教训就是,

QGraphicsView *view;要做成成员变量。
QGraphicsScene* scene; 必须是new出来的,否则不行。

代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
    // 定义一个场景,设置背景色为红色

    QGraphicsScene* scene;   // 定义一个场景,设置背景色为红色
    scene=new QGraphicsScene();
    scene->setBackgroundBrush(Qt::red);

    QPen pen;   // 定义一个画笔,设置画笔颜色和宽度
    pen.setColor(QColor(0, 160, 230));
    pen.setWidth(10);

    QGraphicsRectItem *m_rectItem = new QGraphicsRectItem();   // 定义一个矩形图元
    m_rectItem->setRect(0, 0, 80, 80);
    m_rectItem->setPen(pen);
    m_rectItem->setBrush(QBrush(QColor(255, 0, 255)));
    m_rectItem->setFlag(QGraphicsItem::ItemIsMovable);


    scene->addItem(m_rectItem);      // 把矩形图元添加到场景






    QWidget *widget;
    widget=new QWidget(ui->widget);
    widget->setGeometry(0,0,1024,768);
    widget->show();

    view=new QGraphicsView(widget);
    view->setScene(scene);
    view->resize(1024, 768);
    view->show();


}

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

#include 
#include 
#include 
#include "math.h"


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    QGraphicsView *view;


private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

你可能感兴趣的:(qt,qt)