qt QGraphicsScene 简单例子

本文介绍Qt中使用QGraphicsView绘制图形的基本方法,并解释了不同坐标系的概念及其转换过程。通过实例展示了如何设置场景范围和在场景中添加矩形等元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

坐标
在这里插入图片描述
在这里插入图片描述
graphicsView是Widget这个界面的子控件,
他的位置是左上角坐标为(30,30)
他的宽度为431,高度为431.
如果在graphicsView 这个子控件中,
继续加入 子控件A,由于graphicsView比较特殊。
根据它的alignment属性,如果 子控件A 的长宽小于 graphicsView.
那么子控件A 会在graphicsView 中居中显示。

在这里插入图片描述

这个 子控件A 的左上角顶点
在graphicsView 中有一个坐标值。
同时在子控件A 内部有一个坐标值。
两者的坐标系还不一样。

setSceneRect(qreal x, qreal y, qreal w, qreal h)
ui->graphicsView 增加一个Scene ,
增加这个Scene ,相当于一个widget 增加一个子控件。

x,y 是子控件的左上角这个点,在QGraphicsScene坐标系中的坐标值,
相当于指定了QGraphicsScene 和graphicsView的一个连接点。

这个点在graphicsView 坐标系就是一个qt控件的左上角顶点。
这个点在QGraphicsScene坐标系中,就是x和y指定的一个Scene坐标。
根据这个点,就可以得到Scene的中心点,
根据中心点和w和h,可以得到完整的scene场景。

w,h是Scene 场景的宽度和高度

源码:

#include "widget.h"
#include "ui_widget.h"
#include <QtGui>
#include <QGraphicsEllipseItem>
#include <QGraphicsView>
#include <QGraphicsScene>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);


    QGraphicsScene *scene = new QGraphicsScene;
    scene->setSceneRect(QRectF(0,0,400,400));

    //画一个矩形框
    //矩形框正好等于scene的大小
    QGraphicsRectItem   *item=new QGraphicsRectItem(QRectF(0,0,50,50));
    //可选,可以有焦点,但是不能移动
    item->setFlags(QGraphicsItem::ItemIsSelectable
                   | QGraphicsItem::ItemIsFocusable);
    QPen    pen;
    pen.setWidth(2);
    item->setPen(pen);
    item->setBrush(Qt::red);


    scene->addItem(item);
    scene->setBackgroundBrush(Qt::green);

    ui->graphicsView->setScene(scene);

}

Widget::~Widget()
{
    delete ui;
}

在这里插入图片描述
红色矩形的左上角 就是 scene的中心 坐标原点(0,0)

修改
scene->setSceneRect(QRectF(0,0,400,400));

scene->setSceneRect(QRectF(-200,-200,400,400));

效果如下:
在这里插入图片描述

QGraphicsRectItem(QRectF(0,0,50,50));
0,0是指的 这个图元 在QGraphicsScene坐标系中的坐标值

例子

《Qt5.9 C++开发指南》中 samp8_4GraphicsCooridate

在这里插入图片描述
状态栏
鼠标移动事件 — 鼠标移动 会自动更新状态栏 View坐标和Scene坐标
鼠标点击事件---- 就是鼠标点击一下,状态栏item坐标 会改变一下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值