啥意思,感觉本人语文学得菜,不好描述。

直接看程序运行截图:

1.隐藏鼠标;

2.图元分组;

3.视图与场景坐标转换

程序源码如下:

mygraphicsitem.h

#ifndef MYGRAPHICSITEM_H
#define MYGRAPHICSITEM_H#include <QGraphicsItem>class MyGraphicsItem:public QGraphicsItem
{
public:MyGraphicsItem(QGraphicsItem *parent=0);QRectF boundingRect()const;void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
};#endif // MYGRAPHICSITEM_H

mygraphicsview.h

#ifndef MYGRAPHICSVIEW_H
#define MYGRAPHICSVIEW_H#include <QGraphicsView>
class MyGraphicsItem;class MyGraphicsView:public QGraphicsView
{Q_OBJECT
public:MyGraphicsView(QWidget *parent=0);~MyGraphicsView();void mousePressEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);void setStartAndEndItem(MyGraphicsItem *start, MyGraphicsItem *end);private:qreal m_itemPosX;qreal m_itemPosY;qreal m_changedPosX;MyGraphicsItem *m_item;MyGraphicsItem *m_startItem;MyGraphicsItem *m_endItem;};#endif // MYGRAPHICSVIEW_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
class QGraphicsScene;namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;QGraphicsScene *m_scene;
};#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

mygraphicsitem.cpp

#include "mygraphicsitem.h"
#include <QPainter>MyGraphicsItem::MyGraphicsItem(QGraphicsItem *parent):QGraphicsItem(parent)
{}QRectF MyGraphicsItem::boundingRect() const
{qreal penWidth=1;return QRectF(0-penWidth/2,0-penWidth/2,50+penWidth,50+penWidth);
}void MyGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{Q_UNUSED(option)Q_UNUSED(widget)painter->setPen(QPen(Qt::red,2));painter->drawRect(0,0,50,50);
}

mygrpahicsview.cpp

#include "mygraphicsview.h"
#include <QDebug>
#include <QGraphicsScene>
#include "mygraphicsitem.h"
#include <QMouseEvent>MyGraphicsView::MyGraphicsView(QWidget *parent):QGraphicsView(parent)
{}MyGraphicsView::~MyGraphicsView()
{}void MyGraphicsView::mousePressEvent(QMouseEvent *event)
{m_changedPosX=event->x();m_item=new MyGraphicsItem;m_item->setPos(m_startItem->pos());scene()->addItem(m_item);setCursor(Qt::BlankCursor);QGraphicsView::mousePressEvent(event);
}void MyGraphicsView::mouseReleaseEvent(QMouseEvent *event)
{setCursor(Qt::ArrowCursor);delete m_item;QGraphicsView::mouseReleaseEvent(event);
}void MyGraphicsView::mouseMoveEvent(QMouseEvent *event)
{qDebug()<<"最右端:"<<m_itemPosX+event->pos().x()-m_changedPosX<<"  "<<m_endItem->pos().x();qDebug()<<"最左端:"<<m_itemPosX+event->pos().x()-m_changedPosX<<"  "<<m_startItem->pos().x();if(m_itemPosX+event->pos().x()-m_changedPosX>m_endItem->pos().x()||m_itemPosX+event->pos().x()-m_changedPosX<m_startItem->pos().x()){return;}m_item->setPos(m_itemPosX+event->pos().x()-m_changedPosX,m_itemPosY);
}void MyGraphicsView::setStartAndEndItem(MyGraphicsItem *start,MyGraphicsItem *end)
{m_startItem=start;m_endItem=end;m_itemPosX=m_startItem->pos().x();m_itemPosY=m_startItem->pos().y();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QGraphicsScene>
#include <QMouseEvent>
#include <QDebug>
#include <QGraphicsItemGroup>
#include "mygraphicsitem.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);m_scene=new QGraphicsScene;ui->graphicsView->setScene(m_scene);MyGraphicsItem *startItem=new MyGraphicsItem;startItem->setPos(-300,0);MyGraphicsItem *endItem=new MyGraphicsItem;endItem->setPos(300,0);QGraphicsItemGroup *group=new QGraphicsItemGroup;group->addToGroup(startItem);group->addToGroup(endItem);group->setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);m_scene->addItem(group);ui->graphicsView->setStartAndEndItem(startItem,endItem);
}Widget::~Widget()
{delete ui;
}

Qt工作笔记-图形视图框架中的分组,以及添加平行拖动图元相关推荐

  1. Qt 图形视图框架中的事件处理和传播

    目录名字 Qt 图形视图框架中的事件处理和传播 要点: Qt 图形视图框架中的事件处理和传播 图形视图框架在一些动画类的应用程序上经常会用到.该框架中的事件处理与传播机制也是经常会涉及. 程序设计核心 ...

  2. QT学习之图形视图框架

    文章目录 坐标系统 图形项坐标 场景坐标 视图坐标 坐标映射 事件处理与传播 QGraphicsScene 管理 QGraphicsItem(单击/选择/移动/缩放/删除) 参考 坐标系统 图形项坐标 ...

  3. Qt工作笔记-QMainWindow自定义窗体中利用状态栏进行窗体放缩

    目录 原理 关键代码 原理 在QDialog和QWidget中一般使用重写: void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;void ...

  4. Qt工作笔记-关于各种QGraphics中item的坐标分析(如QGraphicsLineItem)【天坑】

    程序运行截图如下: 只是随便看看,大家不要当一回事, 下面是源码: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> ...

  5. Qt工作笔记-正则表达式QProcess::startDetached中正则表达式的使用

    首先来看下这个函数: 第一个是程序,第二个是参数. 第二个参数需要QStringList 这里可以通过QRegExp("\\s+")进行操作. 他会把空格,制表符进行分割,spli ...

  6. Qt图形视图框架:QGraphicsScene详解

    一.描述 1.场景提供了一个用于管理大量2D图形项的平面.该类充当图形项的容器. 它与视图一起用于可视化2D曲面上的图形图形项. 2.场景没有自己的视觉外观,只负责管理图形项. 3.场景的最大优势之一 ...

  7. 【Qt】2D绘图之图形视图框架(一)

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 场景(Scene) 04. 视图(View) 05. 图形项 06. 附录 01. 概述 在前面讲的基本绘图中,我们可以自 ...

  8. [Qt教程] 第20篇 2D绘图(十)图形视图框架(下)

    [Qt教程] 第20篇 2D绘图(十)图形视图框架(下) 楼主  发表于 2013-5-4 15:43:02 | 查看: 861| 回复: 0 图形视图框架(下) 版权声明 该文章原创于Qter开源社 ...

  9. [Qt教程] 第19篇 2D绘图(九)图形视图框架(上)

    [Qt教程] 第19篇 2D绘图(九)图形视图框架(上) 楼主  发表于 2013-5-4 15:26:20 | 查看: 1798| 回复: 26 图形视图框架(上) 版权声明 导语 在前面讲的基本绘 ...

最新文章

  1. 学校测试-2015-03-01
  2. pymongo查询列表元素_散列表:如何实现word编辑器的拼写检查?
  3. user parameter to determine cache in SAP Gateway
  4. 【Programming Clip】点分十进制IP和长整型转换
  5. 一周二次课(12月12日)
  6. 8.企业安全建设指南(金融行业安全架构与技术实践) --- 安全考核
  7. 白盒测试的学习之路----(五)TestNG的参数分离
  8. 15、AutoLayout使用UIScrollView
  9. 西门子s1200教程_西门子S-1200入门PLC视频教程百度云资源下载
  10. Kindle倒下,iReader接力
  11. 如何在html中引入代码,如何在HTML页面引入javaScript代码
  12. 盾神与积木游戏 (贪心典例)
  13. JAVA 编程语言基础笔记
  14. 工程伦理(2021春)第四章课后习题答案
  15. Android开发拨打座机分机号码
  16. 抖音服务器到底有多大,能够供那么多人同时刷?
  17. PreSonus Studio One 5 Professional v5.5.0 WiN-MAC 音乐制作宿主软件
  18. 2023 计算机职业规划
  19. 对称信道容量的计算MATLAB,准对称信道信道容量的证明及其Matlab实现
  20. 如果介绍自己做的项目

热门文章

  1. windows 7/2008系统字体变成黑体解决
  2. SONICWALL E-Class NSA 系列简介
  3. 被定制化开发坑惨了的IT人,不是所有的报表都能满足老板的需求
  4. zhajinhua2012邮件等网络服务的广泛应用
  5. 一个程序员的感慨的《虚拟光驱》
  6. 程序设计C++使大家容易陷入重复劳动
  7. Application对象 简单的聊天室
  8. C语言嵌入式系统编程修炼之内存操作
  9. WinNT/Win2000/WinXP中的远线程技术之一
  10. Python自由职业可以做什么?副业月入3000的快乐你根本想象不到