Qt图形视图框架
文章平均质量分 67
友善啊,朋友
这个作者很懒,什么都没留下…
展开
-
Qt踩坑记录:场景移除图形项并delete后程序崩溃
执行以下操作: scene->removeItem(item); item->deleteLater();从场景移除图形项并删除它,这样做之后发现有一定概率程序会崩溃,并提示:pure virtual method calledterminate called without an active exception解决办法是场景设置: setItemIndexMethod(QGraphicsScene::NoIndex);解决办法来自:原创 2021-12-01 15:56:40 · 2546 阅读 · 1 评论 -
Qt图形视图框架:获取当前视图显示的范围对应的场景范围
QRectF rect = mapToScene(QRect(0, 0, view->viewport()->width(), view->viewport()->height())).boundingRect();原创 2021-08-19 11:25:55 · 756 阅读 · 1 评论 -
Qt图形视图框架:自定义间隔项
图形视图框架中没有提供类似于QWidget中QSpacerItem这样的提供空白区域的间隔项。可以继承QGraphicsLayoutItem 自定义实现一个。代码#ifndef GRAPHICSSPACERITEM_H#define GRAPHICSSPACERITEM_H#include <QGraphicsLayoutItem>#include <QGraphicsObject>class GraphicsSpacerItem : public QGraph原创 2021-07-13 11:58:40 · 404 阅读 · 0 评论 -
Qt图形视图框架:自定义流式布局
编写自定义布局需要继承QGraphicsLayout,然后实现如下函数:setGeometry():布局的几何形状。 sizeHint():布局大小提示 count():项目数量 itemAt():根据索引获取项 removeAt():从布局中删除索引项。代码如下:#ifndef GRAPHICSFLOWLAYOUT_H#define GRAPHICSFLOWLAYOUT_H#include <QGraphicsLayout>#include <QList>原创 2021-06-06 23:04:13 · 1208 阅读 · 0 评论 -
Qt图形视图框架:将自定义图形项放入布局
只有继承布局项QGraphicsLayoutItem的对象才能放入布局。继承QGraphicsLayoutItem后需要重写setGeometry()、sizeHint()这两个函数。以自定义滑动条图形项为例,继承布局项。代码如下:#ifndef SLIDERGRAPHICSPIXMAPITEM_H#define SLIDERGRAPHICSPIXMAPITEM_H#include <QGraphicsObject>#include <QGraphicsLayoutIte原创 2021-06-06 15:12:31 · 1024 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsAnchorLayout
一、描述图形视图框架锚点布局。可指定小部件应该如何相对于彼此以及布局本身放置。1.1、尺寸提示和尺寸策略QGraphicsAnchorLayout “尊重”每个项目的大小提示和大小策略。1.2、锚布局内的间距布局可能会在项目之间分配一些空间。 如果未明确指定间距,则实际的空间量通常为 0。如果间距为负,则项目将在一定程度上重叠。1.3、目前的问题QGraphicsAnchorLayout 目前不支持某些功能:不考虑拉伸因素。 不遵守 QSizePolicy::Expan..原创 2021-06-05 21:37:50 · 1024 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsLinearLayout
一、描述图形视图框架线性布局。一般用法: QGraphicsScene scene; QGraphicsWidget *textEdit = scene.addWidget(new QTextEdit); QGraphicsWidget *pushButton = scene.addWidget(new QPushButton); QGraphicsLinearLayout *layout = new QGraphicsLinearLayout; layout->addItem原创 2021-06-05 18:14:10 · 947 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsGridLayout
一、描述图形视图框架网格布局。QGraphicsGridLayout 在添加项目时自动计算网格的尺寸。 QGraphicsWidget *textEdit = gphs->addWidget(new QTextEdit); QGraphicsWidget *pushButton = gphs->addWidget(new QPushButton("确定")); QGraphicsGridLayout *layout = new QGraphicsGridLayo原创 2021-06-05 17:07:11 · 1176 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsLayout
一、描述QGraphicsLayout 是一个抽象类,用于为QGraphicsLayoutItem及其子项(如QGraphicsWidget)提供布局。QGraphicsWidget 通过 QGraphicsWidget::setLayout() 设置布局。当小部件调整大小时,布局将自动排列小部件的子项。1.1、编写自定义布局可以使用 QGraphicsLayout 作为基础来编写自己的自定义布局。创建自定义布局时,必须至少重新实现以下功能:setGeometry():布局的几何形状。 .原创 2021-06-05 16:00:29 · 1969 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsItemGroup
一、描述1、QGraphicsItemGroup 是一种特殊类型的复合项,它将自身及其所有子项视为一个项(即所有子项的所有事件和几何图形都合并在一起)。当想要将几个较小的图形项组合成一个大图形项以简化项目的移动和复制时可以使用项目组。2、如果只想将图形项存储在其他图形项中,应该通过将合适的父项传递给 setParentItem() 来直接使用任何 QGraphicsItem而不是使用QGraphicsItemGroup。3、QGraphicsItemGroup 的 boundingRect()原创 2021-06-05 14:18:52 · 5838 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsPixmapItem
一、描述像素图图形项。二、类型成员QGraphicsPixmapItem::ShapeMode:此枚举描述了图形项如何计算它的形状和不透明区域。QGraphicsPixmapItem::MaskShape:通过调用 QPixmap::mask() 确定形状。此形状仅包括像素图的不透明像素。 但是,由于形状更复杂,因此它可能比其他模式慢,并且使用更多内存。 QGraphicsPixmapItem::BoundingRectShape:形状根据像素图的轮廓来确定的。这是最快的形状模式,但它不考原创 2021-06-05 12:37:19 · 7016 阅读 · 3 评论 -
Qt图形视图框架:QGraphicsTextItem
一、描述QGraphicsTextItem 使用文本的格式化大小和关联的字体来提供 boundingRect()、shape() 和 contains() 的合理实现。如果只需要在图形项中显示纯文本,请考虑改用 QGraphicsSimpleTextItem。二、属性成员1、openExternalLinks : boolQGraphicsTextItem 是否应该使用 QDesktopServices::openUrl() 自动打开链接而不是发出 linkActivated()信号。默.原创 2021-06-05 00:33:14 · 8286 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsProxyWidget拖拽和移动(效果很完美)
#ifndef GRAPHICSPROXYWIDGET_H#define GRAPHICSPROXYWIDGET_H#include <QGraphicsProxyWidget>class GraphicsProxyWidget : public QGraphicsProxyWidget{ Q_OBJECTpublic: GraphicsProxyWidget(QGraphicsItem *parent = nullptr); void setCenter.原创 2021-06-02 23:25:03 · 3100 阅读 · 7 评论 -
Qt图形视图框架:QGraphicsProxyWidget详解
一、描述1、QGraphicsProxyWidget 类提供了一个代理层,用于在 QGraphicsScene 中嵌入 QWidget。2、QGraphicsProxyWidget 在两个对象之间转发事件,并在 QWidget 的基于 int 的几何坐标和 QGraphicsWidget 的基于 qreal 的几何坐标之间进行转换。3、QGraphicsProxyWidget 支持 QWidget 的所有核心功能,包括Tab切换焦点、键盘输入、拖放和弹出窗口等。4、QGraphicsProx原创 2021-06-02 22:14:58 · 7235 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsObject概述
一、描述QGraphicsObject使用 QObject 的信号/槽和属性机制扩展了 QGraphicsItem。二、父项与子项1、每个QGraphicsObject对象都可以用一个父项构造。这确保了该图形项在其父项目被销毁时也将被销毁。2、虽然 QGraphicsObject 继承自 QObject 和 QGraphicsItem(这俩都提供了管理子项的机制。QObject:对象树j机制(Qt对象树与所有权)。QGraphicsItem:可以在创建时指定父项,父项在析构时会清除所有子项)原创 2021-06-02 12:34:46 · 3330 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsWidget详解
一、描述1、QGraphicsWidget 是一个扩展的基础项,它在 QGraphicsItem 之上提供额外的功能。 它在很多方面与 QWidget 相似:提供调色板、字体、样式。 有geometry()。 可使用 setLayout() 和 layout()支持布局。 支持使用grabShortcut() 和insertAction() 的快捷键和QAction。 与QGraphicsItem不同,QGraphicsWidget不是抽象类。2、由于QGraphicsWidget与QWi原创 2021-06-01 23:29:56 · 6132 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsLayoutItem(布局项)
一、描述1、图形视图框架布局项QGraphicsLayoutItem是一个抽象类,它定义了一组虚函数,用于描述 QGraphicsLayout 排列的任何对象的大小、大小策略和大小提示。2、子类化 QGraphicsLayoutItem:如果创建 QGraphicsLayoutItem 的子类并重新实现其虚函数,则可以启用布局来调整项目的大小和位置以及其他 QGraphicsLayoutItem,包括 QGraphicsWidget 和 QGraphicsLayout。3、嵌套 QGraphic原创 2021-05-30 21:16:30 · 2398 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsView 详解
Qt图形视图框架:QGraphicsView详解原创 2021-05-30 16:08:59 · 62936 阅读 · 4 评论 -
Qt图形视图框架:QGraphicsScene详解
一、描述1、场景提供了一个用于管理大量2D图形项的平面。该类充当图形项的容器。 它与视图一起用于可视化2D曲面上的图形图形项。2、场景没有自己的视觉外观,只负责管理图形项。3、场景的最大优势之一就是其快速有效地定位图形项的能力。即使场景中有数百万个图形项。4、场景的另一个职责是传播来自视图的事件。要将事件发送到场景,可以构造一个继承QEvent的事件,然后使用QApplication::sendEvent()将其发送。event()负责将事件调度到各个图形项。二、类型成员1、QGra原创 2021-05-29 11:40:31 · 34170 阅读 · 5 评论 -
Qt图形视图框架:图形形状图形项
一、QAbstractGraphicsShapeItem1.1、描述形状图形项的抽象类,没有实现boundingRect()和paint()。1.2、成员函数1、void setBrush(const QBrush &brush)设置形状图形项的笔刷。如果使用带有QGradient的画笔,则渐变是相对于图形项的坐标系的。2、void setPen(const QPen &pen)设置描绘系统图形项轮廓的画笔。二、QGraphicsRectItem.原创 2021-05-26 12:59:20 · 1222 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsItem详解(长文)
一、类型成员1.1、QGraphicsItem::CacheMode:图形项的缓存模式缓存图形加快渲染速度,当需要重新绘制时图形项使用缓存的图形。1、NoCache默认值,所有图形项缓存均已禁用。每次需要重新绘制图形项时,都会调用QGraphicsItem::paint()。2、ItemCoordinateCache为图形项的逻辑(本地)坐标系启用了缓存。 图形项创建一个具有可配置大小/分辨率的屏幕外像素缓冲区。呈现质量通常会下降,具体取决于缓存的分辨率和图形项转换。第一次绘制原创 2021-05-25 22:30:08 · 34152 阅读 · 5 评论 -
【翻译 + 整理】Qt图形视图框架概述
一、描述1、图形视图框架提供了一个用于管理大量定制的二维图形项目并与之交互的界面,以及一个用于可视化项目的视图,并支持缩放和旋转。2、图形视图框架包括一个事件传播体系结构,允许对场景中的项目提供精确的双精度交互功能。项目可以处理按键事件、鼠标按下、移动、释放和双击事件,还可以跟踪鼠标移动。3、图形视图框架使用BSP树来提供非常快速的图形项查找,因此,它可以实时地可视化大型场景,即使有数百万个项目。二、图形视图框架体系结构2.1、场景QGraphicsScene提供了“图形视图”场景。原创 2021-05-18 15:14:44 · 1366 阅读 · 0 评论 -
Qt图形视图框架:视图增加标尺
效果:把视图、水平标尺、垂直标尺用网格布局放置。每当拖动视图的滚动条时,更新标尺的偏移量: connect(deviceGraphicsView->horizontalScrollBar(),&QScrollBar::valueChanged,[this,horizontalRuler] { horizontalRuler->setOffset(deviceGraphicsView->mapToScene(0,0).x());原创 2021-05-12 18:52:15 · 4501 阅读 · 4 评论 -
Qt图形视图框架:在图形项里显示gif图片
QMovie * backgroundGifMovie = new QMovie(this); connect(backgroundGifMovie,&QMovie::frameChanged,[this] { backgroundPixmap = backgroundGifMovie->currentPixmap(); update(); });使用QMovie播放动态图片,当gif的帧改变的时候使用currentPixm...原创 2021-02-05 09:59:34 · 430 阅读 · 0 评论 -
QT图形视图框架:自定义遥控器圆形按钮图形项
效果:代码:#ifndef DISCBUTTONGRAPHICSPIXMAPITEM_H#define DISCBUTTONGRAPHICSPIXMAPITEM_H#include <QGraphicsObject>class DiscButtonGraphicsPixmapItem : public QGraphicsObject{ Q_OBJECTpublic: DiscButtonGraphicsPixmapItem(QString uuid,Q原创 2020-12-30 13:01:49 · 1939 阅读 · 0 评论 -
QT图形视图框架:自定义列表图形项
#ifndef LISTGRAPHICSPIXMAPITEM_H#define LISTGRAPHICSPIXMAPITEM_H#include <QGraphicsObject>//列表图形项class listGraphicsPixmapItem : public QGraphicsObject{ Q_OBJECTpublic: listGraphicsPixmapItem(QString uuid,QGraphicsItem *parent = nullp.原创 2020-12-29 13:32:38 · 880 阅读 · 1 评论 -
QT图形视图框架:自定义颜色选择饼图形项
功能:色饼图形项,显示上图的色饼,点击后获取点击位置的颜色。原理:将点击时的位置转换成原图的位置,获取原图中该位置的像素的颜色。代码:#include <QGraphicsObject>class ColorBoardItem : public QGraphicsObject{public: ColorBoardItem(QString uuid,QGraphicsItem *parent = nullptr);protected: QVariant ..原创 2020-12-24 12:50:58 · 1085 阅读 · 0 评论 -
视图设置网格线和设置背景的方法
qt的demo中有个用图形试图框架绘制流程图的demo,里面是这样设置场景的网格背景的:setBackgroundBrush(QPixmap(":/images/background1.png")若要对视图设置背景,方法是:void drawBackground(QPainter *painter, const QRectF &rect){ painter->drawPixmap(rect,QPixmap(":/img/back.jpg"),QRectF());}原创 2020-12-10 23:29:28 · 1582 阅读 · 0 评论 -
图形视图框架视图和场景概念的理解
来自《Qt学习之路2(30)》:场景就好比一个小世界,里面有很多图形项,视图是照相机的取景框,我们可以移动取景框观察世界,取景框可以只显示世界的一部分,也可以覆盖整个世界。一个场景可以有多个视图,典型的例子是qt自带的模拟芯片demo,开启多台相机对准了小世界。...原创 2020-12-08 22:31:43 · 742 阅读 · 0 评论 -
QT图形视图框架:自定义滑动条图形项
代码:#ifndef SLIDERGRAPHICSPIXMAPITEM_H#define SLIDERGRAPHICSPIXMAPITEM_H#include <QGraphicsObject>class sliderGraphicsPixmapItem : public QGraphicsObject{ Q_OBJECTpublic: sliderGraphicsPixmapItem(QString uuid,Qt::Orientation orientat原创 2020-12-07 18:51:14 · 957 阅读 · 0 评论 -
图形项强制类型转换的一个坑
今天项目中发现一个问题,我定义了两个类型的图形项A类和B类,都是继承QGraphicsObject。在场景中获取选中的图形项: QList<QGraphicsItem *> list = deviceGraphicsScene->selectedItems();当要判断类型是时: QGraphicsItem * item = list.first(); if(A* deviceItem = static_cast<A*>(item))原创 2020-12-04 14:05:21 · 656 阅读 · 0 评论 -
QT图形视图框架:拖拽图形项改变尺寸
参考:QGraphicItem, 拖拽窗口大小例子#include <QGraphicsObject>class commonGraphicsPixmapItem : public QGraphicsObject{ Q_OBJECTpublic: explicit commonGraphicsPixmapItem(QPixmap pixmap,QString title,QGraphicsItem *parent = nullptr); void setTi原创 2020-11-30 13:56:07 · 1732 阅读 · 1 评论 -
QT图形视图框架:限制图形项不重叠
QVariant pixmapItem::itemChange(GraphicsItemChange change, const QVariant &value){ if ((change == ItemPositionChange || change == ItemPositionHasChanged) && scene()) // 控件发生移动 { QPointF newPos = value.toPointF(); QRect.原创 2020-11-29 16:04:02 · 1241 阅读 · 0 评论 -
QT图形视图框架:限制图形项拖动范围
设置场景大小 setSceneRect(0,0,1195,795);设置视图大小 setFixedSize(1200,800);图形项设置: setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsFocusable| QGraphicsItem::ItemIsSelectable | QGraphicsItem..原创 2020-11-29 13:48:01 · 2036 阅读 · 11 评论
分享