4

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

再一次,是否可以在拖动时不抓住鼠标?

我在 Windows 上使用过 Qt 4.5。

根据要求,这里有一些来源: http: //pastebin.com/m422b9495

4

3 回答 3

0

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

另请参阅DragMode

滚动手拖

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

橡皮筋拖动

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

于 2011-10-10T11:16:16.433 回答
0

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

于 2019-07-07T03:43:32.953 回答
0

您可以在源项中使用 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
于 2019-11-18T13:06:00.147 回答