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

其座標原點始終在中間

 

、、-----

相關文章
相關標籤/搜索