Qt:mouseMoveEvent并干扰子对象的hoverEnterEvent

发布于 2024-07-22 05:01:57 字数 367 浏览 10 评论 0原文

我使用 QGraphicsView 创建一种电路编辑器,其中包含带有连接器的元素。 应该可以用电线连接这些连接器。 但是,我遇到了一个问题,当我从一个连接器拖动到另一个连接器时,Qt 抓住鼠标,而其他连接器停止接收 hoverEnterEvent。 顺便说一句,悬停连接器会调整大小,因此更容易击中它们。

再次,拖动时是否可以不抓取鼠标?

我使用的是 Windows 版 Qt 4.5。

根据要求,以下是一些来源: http://pastebin.com/m422b9495

I use QGraphicsView to create a sort of circut editor, which has elements in it, which have connectors. It should be possible to connect those connectors with wires.
However, I have a problem, while I drag from one connector to another, Qt grabs mouse, and other connectors stop receiving hoverEnterEvent. Btw, on hover connectors resize, so it's easier to hit them.

Once again, is it possible not to grab mouse while drag?

I have used Qt 4.5 for Windows.

As requested, here are some sources:
http://pastebin.com/m422b9495

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我要还你自由 2024-07-29 05:01:58

您可以在源项目中使用 mouseMoveEvent 来检查光标何时位于目标项目上。

例如:

def mouseMoveEvent(self, event):
    item = self.scene().itemAt(event.scenePos(), self.scene().views([0].transform())

    if isinstance(item, NodeConnectionGraphicItem):
        if self.item_over_drag is None:
            self.item_over_drag = item
            item.highlighted_mouse_over = True
            ...
            item.update()
    elif self.item_over_drag is not None:
        self.item_over_drag.highlighted_mouse_over = False
        self.item_over_drag.update()
        self.item_over_drag = None

You could use the mouseMoveEvent in the source item to check when the cursor is over the target item.

For example:

def mouseMoveEvent(self, event):
    item = self.scene().itemAt(event.scenePos(), self.scene().views([0].transform())

    if isinstance(item, NodeConnectionGraphicItem):
        if self.item_over_drag is None:
            self.item_over_drag = item
            item.highlighted_mouse_over = True
            ...
            item.update()
    elif self.item_over_drag is not None:
        self.item_over_drag.highlighted_mouse_over = False
        self.item_over_drag.update()
        self.item_over_drag = None
人生戏 2024-07-29 05:01:57

在拖动操作期间更改鼠标悬停行为是比较典型的。 通常响应鼠标移动的小部件在拖动过程中往往不会响应,除非它们可以接收关联的放置。 因此通常的悬停事件被抑制。 (检查小部件是否接受某些放置是不够的,因为问题是小部件是否可以接受此放置。)除了悬停事件之外,请尝试使用拖动的输入和离开事件来调整连接器的大小。

It is somewhat typical to change the mouse-over behavior during a drag operation. Widgets that normally respond to mouse movement tend to not respond during a drag unless they can receive the associated drop. So the usual hover events are suppressed. (Checking whether or not a widget accepts some drops is inadequate since the question is whether or not the widget might accept this drop.) Try using the drag's enter and leave events to resize your connectors, in addition to the hover events.

兲鉂ぱ嘚淚 2024-07-29 05:01:57

我认为您需要将 交互模式 设置为 false。

另请参阅 DragMode

滚动手拖动

<块引用>

光标变为手形,拖动鼠标将滚动滚动条。 此模式适用于交互和非交互模式。

橡皮带拖动

<块引用>

将会出现一根橡皮筋。 拖动鼠标将设置橡皮筋几何形状,并选择橡皮筋覆盖的所有项目。 对于非交互式视图禁用此模式。

I think you need to set interactive mode to false.

See also DragMode

ScrollHandDrag

The cursor changes into a pointing hand, and dragging the mouse around will scroll the scrolbars. This mode works both in interactive and non-interactive mode.

RubberBandDrag

A rubber band will appear. Dragging the mouse will set the rubber band geometry, and all items covered by the rubber band are selected. This mode is disabled for non-interactive views.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文