QGraphicsView 放大或移动时不绘制行项目?
Posted
技术标签:
【中文标题】QGraphicsView 放大或移动时不绘制行项目?【英文标题】:QGraphicsView not drawing line items when zoomed in or moved? 【发布时间】:2013-10-28 10:48:29 【问题描述】:我正在开发一个类似于 DiagramScene 示例的小型 Qt 应用程序。我继承了 QGraphicsView 而不是 QGraphicsScene。我的视图是用 mouseWheel 放大和缩小的,我可以用鼠标拖动它,我可以通过单击添加节点和链接。
我点击一个节点,(设置行项目的第一端),然后移动鼠标(行的第二端跟随鼠标光标),然后我点击第二个节点并锚定第二个行项目的末尾到第二个节点。
问题是,当视图被放大,或者我移动了视图时,当我点击一个节点并移动鼠标时,链接的预览是不可见的。当我单击第二个节点时 - 链接仍然不可见。只有在我缩小视图或将视图拖动到某个点并且它与视图的侧面相交后,两个节点之间的链接才可见。
任何想法如何解决这个问题? 非常感谢您。
【问题讨论】:
听起来可能是不处理不同坐标系(本地/场景/视图)的问题,但是没有代码示例,很难确定。 @Merlin069 不幸的是代码太长或者我不知道如何正确发布(我对***很陌生)。我重新实现了 QGraphicsView 的 mousePress、move 和 release 事件,每当它们被触发时,我都会获取它们的坐标并使用 mapToScene(event->pos()) 将它们映射到场景。我说的对吗? 这取决于您如何处理这些映射坐标。没有代码示例,我不知道。 @Merlin069 这是事件的代码pastebin.com/RYWn18iv 我尝试了以下方法:1) 子类化 QGraphicsScene,就像在 DiagramScene 示例中一样 2) 用不同的逻辑重新实现事件 3) 为预览绘制一个 QGraphicsLineItem 并将其连接到第二个节点它被删除,并且从节点 A 到节点 B 绘制了一个链接所有这些都具有相同的效果,当我放大或拖动场景时,链接是不可见的,直到我缩小很多。我必须强制 View 更新自身并显示线条,但它不适用于任何功能。我能想到的唯一解决方案是每次添加链接时缩小然后放大。 【参考方案1】:我终于修好了。将数据成员用于自定义图形项的坐标(也是边界矩形和绘制方法)是错误的。我使用 setPos() 函数更改了代码,该函数为我的项目提供了正确的坐标。 @Merlin069 谢谢,实际上你的最后一个问题让我思考我是否正确设置了坐标。
【讨论】:
您好 expr。我有同样的问题,但我不明白你是如何解决的。能说清楚一点吗?以上是关于QGraphicsView 放大或移动时不绘制行项目?的主要内容,如果未能解决你的问题,请参考以下文章
QGraphicsView 和 QGraphicsItem:缩放视图矩形时不要缩放项目
从 QGraphicsScene/QgraphicsItemGroup/QGraphicsView 中正确删除项目