实际的运用案例: //获取画布上的所有图元 QList<QGraphicsItem *> items = scene->items(); //遍历画布上的所有图元 for (int ::Type介绍 QGraphicsItem::Type 是标准 item 类中 virtual type() 函数返回的类型值。 QGraphicsItem::UserType 是自定义 itemQGraphicsItem 或任何标准 item 的子类的最小允许类型值。 该值与 QGraphicsItem::type() 的重新实现结合使用并声明一个 Type 枚举值。 QGraphicsItem里是这样定义的: class Q_WIDGETS_EXPORT QGraphicsItem { public: ......
❝拖放机器人示例演示如何在QGraphicsItem子类中实现拖放,以及如何使用Qt的Animation Framework动画化项目。❞ ? Graphics View提供了QGraphicsScene类,用于管理从QGraphicsItem类派生的大量定制2D图形项目,并与之交互;还提供了QGraphicsView小部件,用于可视化项目,并支持缩放和旋转 QGraphicsObject通过继承QObject提供信号和槽,它还可使用Q_PROPERTY声明QGraphicsItem的属性,这使该属性可用于QPropertyAnimation。 RobotPart::RobotPart(QGraphicsItem *parent) : QGraphicsObject(parent), color(Qt::lightGray) { 它不使用动画,不需要属性,也不需要信号和插槽,因此为了节省资源,最自然的是它继承了QGraphicsItem(与QGraphicsObject相对)。
Qt图形视图框架组件 Qt图形视图框架是基于Model-View的架构实现的,主要包含三个相关Qt对象组件分别是: QGraphicsView QGraphicsScene QGraphicsItem 其中QGraphicsScene可以看成是Model-View架构中的Model部分;QGraphicsView可以看成是Model-View架构中的View部分;每个Scene绑定到多个View、QGraphicsItem QtCore.Qt.red) item3.setBrush(brush) item3.setPos(200, 300) item3.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable | QtWidgets.QGraphicsItem.ItemIsSelectable) item2 = QtWidgets.QGraphicsTextItem("OpenCV学堂@gloomyfish
例如,考虑以下类定义: class MyGraphicsItem : public QGraphicsItem { public: explicit MyGraphicsItem(QGraphicsItem nullptr); // 正确的调用 item1 的创建将会失败,因为 MyGraphicsItem() 试图调用无参的默认构造函数,而这个默认构造函数与 explicit MyGraphicsItem(QGraphicsItem 将无参构造函数也标记为 explicit,这样它就不会被用于隐式转换: class MyGraphicsItem : public QGraphicsItem { public: explicit MyGraphicsItem(QGraphicsItem *parent = nullptr); // 将默认构造函数也标记为 explicit explicit MyGraphicsItem { public: explicit MyGraphicsItem(QGraphicsItem *parent = nullptr); // 一个不同的无参构造函数 MyGraphicsItem
在场景中绘制的项都是QGraphicsItem的子类(图形项)。 图形视图类的一个强大的功能是对图形项应用视图变换,例如缩放和旋转,这些变换可以影响场景的呈现方式,但不会改变图形项的自身类容。 __init__(text) #设置图形项为 可选中、可移动 self.setFlags(QGraphicsItem.ItemIsSelectable|QGraphicsItem.ItemIsMovable = QGraphicsItem.ItemSelectedChange: global Dirty Dirty = True return QGraphicsItem.ItemIsMovable| QGraphicsItem.ItemIsFocusable) if rect is = QGraphicsItem.ItemSelectedChange: global Dirty Dirty = True return
qt中提供了QGphicsView,QGraphicsScene,QGraphicsItem,QGraphicsPixmapItem是QGraphicsItem的子类 分辨创建它们的实例:view,scene ,item,然后通过各自的方法scene->addItem(item);view->setScene(scene);就能够达到类似下图的效果,想要进一步定制,则要继承QGraphicsItem或QGraphicsPixmapItem } void NodeUI::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { update(boundingRect()); QGraphicsItem ::ItemIsMovable | QGraphicsItem::ItemIsSelectable); qDebug()<<"name:"<<node_temp->getMyText( 槽,当scene的selectedItem变化时,发送同名信号到此槽 void MainWindow::selectionChanged() { int i=0,j=0; QList<QGraphicsItem
可以通过重写 QWidget 或 QGraphicsItem 的鼠标事件处理函数来响应这些事件,例如 mousePressEvent、mouseReleaseEvent、mouseMoveEvent 等 可以通过重写 QWidget 或 QGraphicsItem 的键盘事件处理函数来响应这些事件,例如 keyPressEvent、keyReleaseEvent、keyReleaseEvent 等。 可以通过重写 QWidget 或 QGraphicsItem 的绘图事件处理函数 paintEvent 来自定义绘图操作。 4.定时器事件(Timer Events):用于定时执行某个操作。 在 Qt 中,可以通过以下方式来处理事件: 1.重写相应的事件处理函数:通过重写 QWidget 或 QGraphicsItem 的事件处理函数来处理特定类型的事件。
当图元发生改变时,更新整个视窗 ui->graphicsView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate); //重写QGraphicsItem setFont(QFont("华文琥珀",12)); textItem->setDefaultTextColor(Qt::red); //设置字体颜色 textItem->setFlags(QGraphicsItem ::ItemIsMovable|QGraphicsItem::ItemIsSelectable); scene->addItem(textItem); } /* 工程: graphicsView
图形视图框架提供了基于图像项模型的模型视图编程方法,主要由场景、视图和图形项这三部分组成,这三部分分别由QGraphicsScene、QGraphicsView、QGraphicsItem这三个类来表示 QPixmap("picture.jpg")); view.resize(400,400); view.show(); return app.exec(); } 图形项 QGraphicsItem 碰撞检测 常用接口: QGraphicsItem::boundingRect() //返回绘图区域 QGraphicsItem::paint() //绘图操作 坐标系统 图形视图框架基于笛卡尔坐标系统 所有的图像项都包含一个z值来设置他们的堆叠顺序,一个图像项的z值默认为0,可使用QGraphicsItem::sizeZValue()来改变一个图像项的z值。 碰撞检测 图像视图框架提供了图像项之间的碰撞检测,碰撞检测可以使用两种方法来实现: 1.重写QGraphicsItem::shape()函数来返回图像项准确的形状,然后使用collidesWithItem
Qt Graphics View框架结构主要包含三个类:场景类(QGraphicsScene)、视图类(QGraphicsView)、图元类(QGraphicsItem)。 它们三者之间的关系:场景类相当于一张画布,图元类(QGraphicsItem)相当于画笔,在画布上绘制了各种图形后,需要将画布挂到墙壁上展示,视图类就相当于用于展示画布的这一堵墙。
QPainterPath, QPen, QPolygonF, QRadialGradient) from PyQt5.QtWidgets import (QApplication, QGraphicsItem , QGraphicsScene, QGraphicsView, QStyle) class Edge(QGraphicsItem):#边线图形项 Pi = math.pi TwoPi = 2.0 * Pi Type = QGraphicsItem.UserType + 2 def __init__(self, sourceNode, destNode ):#节点小球图形项 Type = QGraphicsItem.UserType + 1 def __init__(self, graphWidget): super ) self.setFlag(QGraphicsItem.ItemSendsGeometryChanges) self.setCacheMode(QGraphicsItem.DeviceCoordinateCache
using namespace ogdf; Graph graph; // setup graph QMap<NodeElement*, QNEBlock*> nodeMap; foreach(QGraphicsItem QNEBlock::Type, qVariantFromValue((void*)node)); nodeMap[node] = (QNEBlock*)item; } } foreach(QGraphicsItem
并设置了它的大小(这也是为什么我们的绘图板有滚动条的原因) 另外需要注意的是QGraphicsScene的坐标原点在中心位置,如下图所示 四: CustomArrow是描述箭头连线的类: 这个类继承自QGraphicsItem boundingRect是QGraphicsItem的虚函数,必须要实现, 其中1.5是箭头连线的线宽,8是箭头张开后所占的区域宽度 p1是箭头的起始点,p2是箭头结束点(也就是带箭头的那一端
setFont(QFont("华文琥珀",12)); textItem->setDefaultTextColor(Qt::red); //设置字体颜色 textItem->setFlags(QGraphicsItem ::ItemIsMovable|QGraphicsItem::ItemIsSelectable); scene->addItem(textItem); // //设置无边框透明 //
pItem = new QGraphicsPixmapItem(); //设置元素可以选中和拖动 pItem->setAcceptHoverEvents(true); pItem->setFlags(QGraphicsItem ::ItemIsSelectable | QGraphicsItem::ItemIsMovable); pItem->setPixmap(QPixmap::fromImage(srcImage)); pScene new CustomImageItem(this); m_pImageItem->setAcceptHoverEvents(true); m_pImageItem->setFlags(QGraphicsItem ::ItemIsSelectable | QGraphicsItem::ItemIsMovable); this->setScene(m_pScene); m_pScene->addItem
QtCore import (QTimer, QPointF, QRectF, Qt) from PyQt5.QtWidgets import (QApplication, QDialog, QGraphicsItem from PyQt5.QtGui import (QBrush, QColor,QPainter,QPainterPath,QPolygonF) SCENESIZE = 500 class Head(QGraphicsItem item.color.setBlue(min(255, item.color.blue() + 1))#则自身(头部)蓝色分量加一 class Segment(QGraphicsItem
{ } 3.2 新建一个子类: xxx.h文件 #ifndef GRAPHICSVIEW_H #define GRAPHICSVIEW_H #include <QWidget> #include <QGraphicsItem
这些特效可以应用于任何QGraphicsItem或QWidget对象。 特效的应用:特效可以通过设置QWidget或QGraphicsItem的graphicsEffect属性来应用。
Qt中围绕着QGraphicsView、QGraphicsScene、QGraphicsItem类引入了一种全新的“图形视图”体系【了解概念即可,不作详细介绍】。——摘自C++ GUI Qt4编程。
*ancestor) const; 3QPoint QWidget::mapFrom(const QWidget *ancestor, const QPoint &pos) const; 注意,我们在QGraphicsItem 1bool isVisibleTo(const QGraphicsItem *parent) const; 2QPointF mapFromItem (const QGraphicsItem *item 在实践中,很不幸这样的做法将导致无法使用的API: 1QGraphicsScene scene; 2// … populate scene 3 4foreach (const QGraphicsItem paint(QPainter **painter, const QStyleOptionViewItem &option, const QModelIndex &index) const 3 4// QGraphicsItem ::paint is not const 5void QGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem option