Qt工作笔记-图形视图框架中的分组,以及添加平行拖动图元
啥意思,感觉本人语文学得菜,不好描述。
直接看程序运行截图:
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工作笔记-图形视图框架中的分组,以及添加平行拖动图元相关推荐
- Qt 图形视图框架中的事件处理和传播
目录名字 Qt 图形视图框架中的事件处理和传播 要点: Qt 图形视图框架中的事件处理和传播 图形视图框架在一些动画类的应用程序上经常会用到.该框架中的事件处理与传播机制也是经常会涉及. 程序设计核心 ...
- QT学习之图形视图框架
文章目录 坐标系统 图形项坐标 场景坐标 视图坐标 坐标映射 事件处理与传播 QGraphicsScene 管理 QGraphicsItem(单击/选择/移动/缩放/删除) 参考 坐标系统 图形项坐标 ...
- Qt工作笔记-QMainWindow自定义窗体中利用状态栏进行窗体放缩
目录 原理 关键代码 原理 在QDialog和QWidget中一般使用重写: void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;void ...
- Qt工作笔记-关于各种QGraphics中item的坐标分析(如QGraphicsLineItem)【天坑】
程序运行截图如下: 只是随便看看,大家不要当一回事, 下面是源码: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> ...
- Qt工作笔记-正则表达式QProcess::startDetached中正则表达式的使用
首先来看下这个函数: 第一个是程序,第二个是参数. 第二个参数需要QStringList 这里可以通过QRegExp("\\s+")进行操作. 他会把空格,制表符进行分割,spli ...
- Qt图形视图框架:QGraphicsScene详解
一.描述 1.场景提供了一个用于管理大量2D图形项的平面.该类充当图形项的容器. 它与视图一起用于可视化2D曲面上的图形图形项. 2.场景没有自己的视觉外观,只负责管理图形项. 3.场景的最大优势之一 ...
- 【Qt】2D绘图之图形视图框架(一)
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 场景(Scene) 04. 视图(View) 05. 图形项 06. 附录 01. 概述 在前面讲的基本绘图中,我们可以自 ...
- [Qt教程] 第20篇 2D绘图(十)图形视图框架(下)
[Qt教程] 第20篇 2D绘图(十)图形视图框架(下) 楼主 发表于 2013-5-4 15:43:02 | 查看: 861| 回复: 0 图形视图框架(下) 版权声明 该文章原创于Qter开源社 ...
- [Qt教程] 第19篇 2D绘图(九)图形视图框架(上)
[Qt教程] 第19篇 2D绘图(九)图形视图框架(上) 楼主 发表于 2013-5-4 15:26:20 | 查看: 1798| 回复: 26 图形视图框架(上) 版权声明 导语 在前面讲的基本绘 ...
最新文章
- 学校测试-2015-03-01
- pymongo查询列表元素_散列表:如何实现word编辑器的拼写检查?
- user parameter to determine cache in SAP Gateway
- 【Programming Clip】点分十进制IP和长整型转换
- 一周二次课(12月12日)
- 8.企业安全建设指南(金融行业安全架构与技术实践) --- 安全考核
- 白盒测试的学习之路----(五)TestNG的参数分离
- 15、AutoLayout使用UIScrollView
- 西门子s1200教程_西门子S-1200入门PLC视频教程百度云资源下载
- Kindle倒下,iReader接力
- 如何在html中引入代码,如何在HTML页面引入javaScript代码
- 盾神与积木游戏 (贪心典例)
- JAVA 编程语言基础笔记
- 工程伦理(2021春)第四章课后习题答案
- Android开发拨打座机分机号码
- 抖音服务器到底有多大,能够供那么多人同时刷?
- PreSonus Studio One 5 Professional v5.5.0 WiN-MAC 音乐制作宿主软件
- 2023 计算机职业规划
- 对称信道容量的计算MATLAB,准对称信道信道容量的证明及其Matlab实现
- 如果介绍自己做的项目