问题标签 [qgraphicsitem]

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.

0 投票
3 回答
4349 浏览

qt - QGraphicsItem :模拟不是左上角的项目原点

我的应用程序正在使用 Qt。

我有一个继承QGraphicsPixmapItem的类。

在这些项目上应用变换(例如,旋转)时,项目的原点(或枢轴点)始终是左上角。

我想改变这个原点,例如,在设置项目的位置时,这实际上会改变像素图的中心。

或者,如果我正在应用旋转,则旋转的原点将是像素图的中心。

我还没有找到使用 Qt 直接开箱即用的方法,所以我想像这样重新实现itemChange()

我认为这会起作用,因为Qt 的文档提到项目的位置及其变换矩阵是两个不同的概念。

但它不起作用。

任何的想法 ?

0 投票
1 回答
3300 浏览

c++ - 为什么 QGraphicsItem::scenePos() 不断返回 (0,0)

我一直在玩弄这段代码:

指针this指向一个QGraphicsScene. 在这两种情况下,我都得到QPointF(0,0)了两种输出。
通过阅读文档,我认为scenePos()应该返回场景中线条的位置,而不是它在其局部坐标系中的位置。我究竟做错了什么?

0 投票
2 回答
1855 浏览

qt - QGraphicsItem取消选择重绘问题

非常简单的 Qt GUI 应用程序:

  • 在现场我有多个圆圈实现为 QGraphicsItem
  • boundingRect 返回围绕这个圆的正方形。
  • 方法“形状”未被覆盖。

在我添加的 paint() 方法中出现问题:

选择被很好地绘制,但取消选择不会导致重绘。在日志级别,我可以看到该项目确实丢失了选择标志。从 itemChange 调用 update() 也是没用的。提前感谢您的任何建议。

0 投票
1 回答
2267 浏览

c++ - 自定义 QGraphicsItems 未编译并给出“对象是私有的”错误

我正在尝试创建一个自定义 QGraphicsItem 按钮,如 Fred所示。他发布的代码可以在这里找到。

问题是当我尝试编译代码时出现以下两个错误:

  • /usr/include/qt4/QtGui/qgraphicsitem.h 'QGraphicsItem::QGraphicsItem(const QGraphicsItem&)' 是私有的
  • /usr/include/qt4/QtCore/qobject.h
    'QObject::QObject(const QObject&)' 是私有的

这是与上面示例中的代码片段基本相同的代码片段。错误是关于类减速。

有趣的是,此处显示的另一个示例工作正常。可以在这里找到示例代码。

知道有什么问题吗?提前致谢。

0 投票
2 回答
972 浏览

qt - Qt - 无效转换为子类

我正在使用图形视图框架绘制多边形。我用这个在场景中添加了一个多边形:

但是我需要在图形项上实现一些自定义行为,例如选择、鼠标悬停指示器和其他类似的东西。所以我声明了一个继承QGraphicsPolygonItem的类:

如您所见,到目前为止,该课程并没有做太多事情。但是不应该用我的 GridHex 类替换 QGraphicsPolygonItem 吗?这会引发“从 'QGraphicsPolygonItem*' 到 'GridHex*' 的无效转换”错误:

我究竟做错了什么?

0 投票
2 回答
880 浏览

c++ - 子类化 QGraphicsItemGroup

我的系统具有从 QGraphicsWidget 派生的类。我在 QGraphicsScene 的布局中管理派生类对象。现在我需要一个包含两个或多个 QGraphicsWidget 的复合项目,并且我需要将该项目放在我的布局中。所以我选择 QGraphicsItemGroup 并像这样写我的类。

我只再次实现了 sizeHint 函数。将 CompositeItem 实例添加到布局时,它不会显示。什么可能导致这种情况?我哪里做错了?

0 投票
1 回答
1964 浏览

c++ - 子类化 QGraphicsLayoutItem

我究竟如何继承 QGraphicsLayoutItem?我编写了一个子类 QGraphicsLayoutItem 并重新实现 sizeHint 和 setGeometry 但是当我将自定义项目添加到线性或网格布局时。它不显示?什么不见​​了?

这是我的审判。

0 投票
2 回答
641 浏览

qt - 如何在 MFC 视图中绘制 QGraphicsItem

我开始在我的应用程序中使用 Qt。我的应用程序是基于 MFC 的。我想在我当前的 MFC 视图中绘制一些 QGraphicsItems,可以吗?

您可能会说可以通过在 MFC 视图中使用 QWinWidget 托管 QGraphicsView 来完成,但是这不起作用。因为我的画布(MFC 视图)支持缩放和旋转,而 QGraphicsView 本身不支持。当我缩放 QGraphicsItem 时,QGraphicsView 显示滚动条而不是放大自身。

有什么建议吗?谢谢!

0 投票
1 回答
634 浏览

c++ - 容器项实现

我在火车交通控制器软件项目中工作。我在这个项目中的职责是开发可视化铁路 GUI。

我们正在使用 Qt 实施该项目。

现在我正在使用QGraphicsLinearLayout来保存我的项目。我正在使用布局,因为我不想计算每个项目的坐标。

到目前为止,我编写了项目类来添加布局。例如 SwitchItem 类象征着

现实世界中的铁路道岔。每个项目类负责自己的绘画和事件。到目前为止,一切都很好。

现在我需要一个可以包含两个或多个项目的复合项目。这个类将负责绘制其中包含的项目。我需要这个类,因为我必须将两个或多个项目放在同一个布局单元格中。如果我不将它们放在同一个单元格中,我将无法使用布局。见下图。

复合项目

BlockSegmentItem 和 SignalItem 在同一个单元格内。

CompositeItem 头文件

此代码适用于绘画,但涉及项目事件时会出现问题。 QGraphicsScene将复合项目视为适合布局但不适用于事件的单个项目。因为每个项目都有自己的事件实现。(例如 SignalItem 有其特殊的上下文菜单事件。)

我必须单独处理项目事件。我还需要布局的复合项目实现。我怎样才能克服这个困境?

0 投票
2 回答
12388 浏览

c++ - QGraphicsItem 不接收鼠标悬停事件

我有一个派生自 的类QGraphicsView,其中包含 -QGraphicsItem派生元素。我希望这些元素在鼠标光标悬停在它们上方时改变颜色,所以我实现了hoverEnterEvent(和hoverLeaveEvent):

但是,此事件处理程序代码永远不会执行。我已明确启用鼠标跟踪:

尽管如此,还是没有运气。我究竟做错了什么?