1、新建QT GUI项目,基类widget
2、在widget.h中
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QDebug>
private:
QGraphicsView *_view;
QGraphicsScene *_scene;
2、在widget的构造函数中:
#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)));
}
效果:
改进程序:让_view的效果随着对话框的变大而变大:如果_view小了会显示一部分scene,并且自动添加场景条。如果_view比_scene大,会全部显示。
方法1:添加布局,将_view放置为一个box布局
#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中是:
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()));
}
--
其坐标原点始终在中间
、、-----