问题标签 [qgraphicsview]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
qt - QGraphicsView 滚动和图像缩放/裁剪
我想在我的 QGraphicsView 中有一个背景图像,它总是缩放(并在必要时裁剪)到视口的大小,没有滚动条,也没有使用键盘和鼠标滚动。下面的示例是我在视口中缩放和裁剪图像的操作,但我使用随机值进行从以太中拉出的裁剪。我想要一个合乎逻辑的解决方案?
我想知道一种将图像缩放和裁剪为 QGraphicsView 大小的方法,即使我调整 QGraphicsView 的大小也能正常工作。1.5 和 19 来自哪里?
编辑; 我也尝试使用 setBackgroundBrush,但即使使用缩放/裁剪的 QImage/QPixmap,我也会得到平铺背景。
编辑; 到目前为止,我的解决方案是重写 drawBackground() 以获得我想要的结果,但这仍然不能帮助我学习如何将图像大小调整为 qgraphicsview 的视口大小。任何进一步的答案将不胜感激。
c++ - Qt Graphics Scene鼠标事件传播
你好,我正在学习 qt,我正在执行以下操作以将一些小部件添加到图形场景中
我的 ProductInfo 类处理鼠标释放并发出信号
问题是在将小部件添加到场景后,它们不再获得鼠标释放事件并且不会发出 productClicked 信号,但是如果我将它们添加到主窗口(而不是场景),它们会按预期工作。我究竟做错了什么?
c++ - 自定义 QGraphicsItems 未编译并给出“对象是私有的”错误
我正在尝试创建一个自定义 QGraphicsItem 按钮,如 Fred所示。他发布的代码可以在这里找到。
问题是当我尝试编译代码时出现以下两个错误:
- /usr/include/qt4/QtGui/qgraphicsitem.h 'QGraphicsItem::QGraphicsItem(const QGraphicsItem&)' 是私有的
- /usr/include/qt4/QtCore/qobject.h
'QObject::QObject(const QObject&)' 是私有的
这是与上面示例中的代码片段基本相同的代码片段。错误是关于类减速。
有趣的是,此处显示的另一个示例工作正常。可以在这里找到示例代码。
知道有什么问题吗?提前致谢。
qt - Qt - 无效转换为子类
我正在使用图形视图框架绘制多边形。我用这个在场景中添加了一个多边形:
但是我需要在图形项上实现一些自定义行为,例如选择、鼠标悬停指示器和其他类似的东西。所以我声明了一个继承QGraphicsPolygonItem的类:
如您所见,到目前为止,该课程并没有做太多事情。但是不应该用我的 GridHex 类替换 QGraphicsPolygonItem 吗?这会引发“从 'QGraphicsPolygonItem*' 到 'GridHex*' 的无效转换”错误:
我究竟做错了什么?
c++ - Qt - 使用图形视图框架拖放
我正在尝试使用图形框架制作一个简单的可拖动项目。这是我到目前为止所做的代码:
小部件类:
拖动视图类:
DragScene 类:
拖动项类:
main.cpp 实例化一个 Widget 并显示它。当我尝试拖动圆圈时,应用程序只会在原始圆圈上创建另一个圆圈,无论我在哪里释放拖动。每次拖动结束时,DragScene 的 dropEvent() 中的 qDebug() 都会显示 QPointF(0,0)。我很难准确地理解我必须做什么,我应该子类化哪些类,需要覆盖哪些方法,以使这项工作正常进行。这方面的文档不是很详细。我想知道如何完成这项工作,以及是否还有其他更全面的资源来了解图形视图框架,除了官方文档(顺便说一句,这很好,但如果有更详细的论题)。
编辑:
按照 badrr 的建议,我将 DragScene::dropEvent() 中的 item->pos() 替换为 item->scenePos(),现在 drop 事件在 drop 站点中创建了一个新圆圈,这或多或少是我想要的。但原来的圆圈还在原处,并且在拖动过程中,该项目没有跟随鼠标光标。
QGraphicsSceneDragDropEvent 文档说 pos() 应该返回与发送事件的视图相关的光标位置,除非我弄错了,否则它不应该一直是 (0,0)。诡异的。
我在论坛帖子中读到,您可以使用 QDrag::setPixMap() 在拖动期间显示某些内容,并且在示例中我看到图片被设置为像素图,但是如何制作像素图就像图形项一样我应该是拖吗?
c++ - 子类化 QGraphicsItemGroup
我的系统具有从 QGraphicsWidget 派生的类。我在 QGraphicsScene 的布局中管理派生类对象。现在我需要一个包含两个或多个 QGraphicsWidget 的复合项目,并且我需要将该项目放在我的布局中。所以我选择 QGraphicsItemGroup 并像这样写我的类。
我只再次实现了 sizeHint 函数。将 CompositeItem 实例添加到布局时,它不会显示。什么可能导致这种情况?我哪里做错了?
c++ - 容器项实现
我在火车交通控制器软件项目中工作。我在这个项目中的职责是开发可视化铁路 GUI。
我们正在使用 Qt 实施该项目。
现在我正在使用QGraphicsLinearLayout来保存我的项目。我正在使用布局,因为我不想计算每个项目的坐标。
到目前为止,我编写了项目类来添加布局。例如 SwitchItem 类象征着
现实世界中的铁路道岔。每个项目类负责自己的绘画和事件。到目前为止,一切都很好。
现在我需要一个可以包含两个或多个项目的复合项目。这个类将负责绘制其中包含的项目。我需要这个类,因为我必须将两个或多个项目放在同一个布局单元格中。如果我不将它们放在同一个单元格中,我将无法使用布局。见下图。
BlockSegmentItem 和 SignalItem 在同一个单元格内。
CompositeItem 头文件
此代码适用于绘画,但涉及项目事件时会出现问题。 QGraphicsScene将复合项目视为适合布局但不适用于事件的单个项目。因为每个项目都有自己的事件实现。(例如 SignalItem 有其特殊的上下文菜单事件。)
我必须单独处理项目事件。我还需要布局的复合项目实现。我怎样才能克服这个困境?
c++ - 获取 QGraphicsView 的更新大小
在我的 Qt 应用程序中,我动态创建QGraphicsView (s) 并将它们添加到QGridLayout中。当我在网格内添加第一个视图时,该视图覆盖了网格内的所有可用空间。然后我添加第二个视图,现在网格内有两个大小相同的视图。然后我添加第三个视图,现在网格内有三个大小相同的视图。等等。
如何获得第一个视图的更新大小?
以下是我的试用版,但我认为这不起作用。
c++ - 关于在 QGraphicsView/QGraphicsScene 上缩放的一般建议
在我的项目中,我正在使用QGraphicsView / QGraphicsScene的东西。
在我的场景中,会有包含 2D 图形的区域。区域数量将受到限制(假设为 20)
用户可以选择显示一个或多个区域。
如果用户选择显示一个区域,我将在场景中显示一个区域
如果用户选择显示 n 个区域,我将在场景中显示 n 个区域,
我需要一个缩放逻辑来适应同一场景中的 n 个区域。
我怎样才能做到这一点?
c++ - QGraphicsView ensureVisible() 和 centerOn()
我将在QGraphicsView上进行平移/缩放。
所以我阅读了QGraphicsView的文档并看到了一些实用功能,例如ensureVisible()和centerOn()。
我想我理解文档所说的内容,但我无法编写一个有效的示例。
你能否写/建议我一个示例代码来理解这个问题。