一、新建QT GUI项目,基类widget函数
二、在widget.h中布局
#include <QGraphicsScene> #include <QGraphicsView> #include <QDebug> private: QGraphicsView *_view; QGraphicsScene *_scene;
二、在widget的构造函数中:this
#include <QGraphicsLineItem> Widget::Widget(QWidget *parent) : QWidget(parent) { _view = new QGraphicsView(this); _view->setScene(_scene = new QGraphicsScene); _scene->addItem(new QGraphicsLineItem(QLineF(0, 0, 100, 100))); }
效果:spa
改进程序:让_view的效果随着对话框的变大而变大:若是_view小了会显示一部分scene,而且自动添加场景条。若是_view比_scene大,会所有显示。code
方法1:添加布局,将_view放置为一个box布局blog
#include <QGraphicsLineItem> #include <QVBoxLayout> Widget::Widget(QWidget *parent) : QWidget(parent) { QVBoxLayout *lay = new QVBoxLayout(this); _view = new QGraphicsView(this); lay->addWidget(_view); //让_view自动布局 _view->setScene(_scene = new QGraphicsScene); _scene->addItem(new QGraphicsLineItem(QLineF(0, 0, 100, 100))); }
方法2:重写resizeEvent事件:让view的大小随着widget的大小变化而变化进程
在widget.h中添加:事件
void resizeEvent(QResizeEvent *);
在widget.cpp中是:get
Widget::Widget(QWidget *parent) : QWidget(parent) { _view = new QGraphicsView(this); _view->setScene(_scene = new QGraphicsScene); _scene->addItem(new QGraphicsLineItem(QLineF(0, 0, 100, 100))); } void Widget::resizeEvent(QResizeEvent *) { //设置_view的大小为widget的大小 _view->setGeometry(QRect(QPoint(0, 0), size())); }
--class
其坐标原点始终在中间
、、-----