QT之二维绘图:场景,图元,视图

一、新建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

其坐标原点始终在中间

 

、、-----

相关文章
相关标签/搜索