图形视图框架

思路

新建场景、图元、和视图。
图元添加到场景,场景与视图关联,视图显示。

初始例子

头文件

#include <QGraphicsScene> //场景:添加图元  void addItem(QGraphicsItem *item)
#include <QGraphicsView> //视图;显示场景
#include <QGraphicsItem> //图元

main.cpp

    QGraphicsScene *scene = new QGraphicsScene;  //场景
    QGraphicsRectItem *item = new QGraphicsRectItem(100,100,50,50);  //矩形项
    scene->addItem(item);  //项添加到场景
    QGraphicsView *view = new QGraphicsView; //视图
    view->setScene(scene);  //视图关联场景
    view->resize(500,500);
    view->show();  //显示视图

具体操作

新建一个图元类MyItem继承QGraphicsItem,可以实现自定义的图元项
在这里插入图片描述
注意需要重写两个虚函数boundingRect()和paint(),不然编译会有错误

myitem.h


#ifndef MYITEM_H
#define MYITEM_H
#include <QGraphicsItem>

class MyItem : public QGraphicsItem
{
public:
    MyItem();
    QRectF boundingRect() const override;
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
   };

#endif // MYITEM_H

myitem.cpp

#include "myitem.h"
#include <QPainter>
MyItem::MyItem()
{

}

QRectF MyItem::boundingRect() const
{

    qreal penWidth = 1;//笔宽
    return QRectF(0 - penWidth/2,0-penWidth/2,20+penWidth,20+penWidth);//返回矩形边框(坐标、宽高)
}

void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{

    //标明该参数没有使用
       Q_UNUSED(option)
       Q_UNUSED(widget)

       painter->setBrush(Qt::green);//用绿色的 笔刷
       painter->drawEllipse(0,0,50,50);//画圆
}

效果1:一个绿色的圆形::
main.cpp

#include "widget.h"
#include <QApplication>
#include "animation.h"
#include <QDebug>
#include "myitem.h"
int main(int argc, char *argv[])
{

    QApplication a(argc, argv);
//    Widget w;
//    w.show();

    QGraphicsScene *scene = new QGraphicsScene;  //场景
   // QGraphicsRectItem *item = new QGraphicsRectItem(100,100,50,50);  //矩形项
    MyItem *item=new MyItem;//新建图元类对象
    scene->addItem(item);  //项添加到场景
    QGraphicsView *view = new QGraphicsView; //视图
    view->setScene(scene);  //视图关联场景
    view->resize(500,500);
    view->show();  //显示视图

    return a.exec();
}

在这里插入图片描述

在这里插入图片描述
效果2:两个绿色的圆形
操作:再定义一个图元类对象,记得修改第二个图元位置(防止与第一个重合)
main.cpp

#include "widget.h"
#include <QApplication>
#include "animation.h"
#include <QDebug>
#include "myitem.h"
int main(int argc, char *argv[])
{
   	QApplication a(argc, argv);
    QGraphicsScene *scene = new QGraphicsScene;  //场景
   // QGraphicsRectItem *item = new QGraphicsRectItem(100,100,50,50);  //矩形项
    MyItem *item=new MyItem;
    MyItem *item1=new MyItem;
    scene->addItem(item);  //项添加到场景
    scene->addItem(item1);
    item1->setPos(66,66);//设置第二个图元位置
    QGraphicsView *view = new QGraphicsView; //视图
    view->setScene(scene);  //视图关联场景
    view->resize(500,500);
    view->show();  //显示视图

    return a.exec();
}

在这里插入图片描述

图元移动

定义advance函数实现移动,需要绑定定时器

碰撞检测

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值