QT图形视图框架的坐标系统

QT图形视图框架的坐标系统,点击位置显示坐标,图形旋转

 

#ifndef MYITEM_H
#define MYITEM_H
#include <QGraphicsItem>


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

#endif // MYITEM_H
#ifndef MYVIEW_H
#define MYVIEW_H
//图形视图框架的坐标系统
#include <QGraphicsView>

class MyView:public QGraphicsView
{
    Q_OBJECT
public:
     explicit MyView(QWidget *parent=0);
protected:
    void mousePressEvent(QMouseEvent *event);
};

#endif // MYVIEW_H

main.cpp

//#include <QCoreApplication>
#include <QApplication> //pro文件,QT+=widgets
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QDebug>
#include <QGraphicsView>
#include "myitem.h"
#include "myview.h"

//QT图形视图框架-场景
int main(int argc, char *argv[])
{
   // QCoreApplication a(argc, argv); //qwidget:cannot creat a qwidget without qapplication
    //改为QApplication
    QApplication a(argc, argv);
    //新建场景
    QGraphicsScene scene;
    //创建矩形--图形项
//    //QGraphicsRectItem *item2=new QGraphicsRectItem(0,0,100,100);
//    MyItem *item2=new MyItem;
//    //为场景创建视图


//    //将图形项添加到场景中
//    scene.addItem(item2);
//    //输出(50,50)点处的图形项
//    qDebug()<<scene.itemAt(50,50,QTransform());


//      QGraphicsView view2(&scene);
//    view2.setForegroundBrush(QColor(255,255,0,100));
//     //设置场景的背景图片
//     view2.setBackgroundBrush(QPixmap("./lpyou.png")); //lpyou.png在build-src11_1b-Desktop_Qt_6_4_0_MinGW_64_bit-Debug 目录

//    view2.resize(800,600);
//    view2.show();

//    QGraphicsView view3(&scene);
//     view3.setForegroundBrush(QColor(255,255,0,100));
//    view3.resize(400,300);
//   view3.show();
    scene.setSceneRect(0,0,400,300);//将创景的原点显示在视图的左上角
    MyItem *item2=new MyItem;
    //item2->setZValue(1);//item移动到rectItem之上--红矩形在绿矩形之上
    scene.addItem(item2);
    item2->setPos(10,10);
    QGraphicsRectItem *rectItem=scene.addRect(QRect(0,0,100,100),
                                              QPen(Qt::blue),QBrush(Qt::green));
    item2->setParentItem(rectItem);
    rectItem->setRotation(45);//旋转45度
    rectItem->setPos(20,20);
    MyView view2;
    view2.setScene(&scene);
    view2.setForegroundBrush(QColor(255,255,0,100));
    view2.setBackgroundBrush(QPixmap("./lpyou.png")); //lpyou.png在build-src11_1b-Desktop_Qt_6_4_0_MinGW_64_bit-Debug 目录
    view2.resize(600,500);
    view2.show();



    return a.exec();
}
#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)
{
  painter->setBrush(Qt::red);
  painter->drawRect(0,0,20,20);
}
#include "myview.h"
#include <QMouseEvent>
#include <QGraphicsItem>
#include <QDebug>

MyView::MyView(QWidget *parent):QGraphicsView(parent)
{

}

void MyView::mousePressEvent(QMouseEvent *event)
{
   //分别获取鼠标单击处在视图,场景和图形项中的坐标,并输出
    QPoint viewPos=event->pos();
    qDebug()<<"viewPos: "<<viewPos;
    QPointF scenePos=mapToScene(viewPos);
    qDebug()<<"scenePos: "<<scenePos;
    QGraphicsItem *item2=scene()->itemAt(scenePos,QTransform());
    if(item2)
    {
        QPointF itemPos=item2->mapFromScene(scenePos);
        qDebug()<<"itemPos: "<<itemPos;
    }
    //这里先使用鼠标事件对象event获取了鼠标单击位置的视图中的坐标,然后使用映射函数这个坐标转换为了场景中的坐标,
    //并使用了scene()函数获取视图当前的场景的指针,然后使用QGraphicsScene::ItemAt()函数获取了场景中该坐标处的图形项。
    //如果这里有图形项,那么便输出该点在图形项坐标系统中的坐标
}
//这里先使用鼠标事件对象event获取了鼠标单击位置的视图中的坐标,然后使用映射函数这个坐标转换为了场景中的坐标,
    //并使用了scene()函数获取视图当前的场景的指针,然后使用QGraphicsScene::ItemAt()函数获取了场景中该坐标处的图形项。
    //如果这里有图形项,那么便输出该点在图形项坐标系统中的坐标
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

txwtech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值