我做了一个例子,窗体上有一个按钮,还有一个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 <QMainWindow>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsRectItem>
#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