【问题标题】:How to make selection on QGraphicsScene?如何在 QGraphicsScene 上进行选择?
【发布时间】:2011-02-21 16:12:20
【问题描述】:

我正在使用图形视图框架在 Qt 中编写图表编辑器。 目前我只是想在 GraphScene (QGraphicsScene) 上创建一个简单的节点 (QGraphicsItem)。我创建了一个 Canvas (QGraphicsView) 并向其中添加了一个网格。我什至可以添加节点并在场景中移动它们。我的最终目标是拥有不同的工作模式、编辑和样式选项等。现在我只想知道如何为场景中已经存在的节点设置选择。我尝试用鼠标事件来做,但注意到事件调用选择和节点插入重叠......当我尝试选择一些东西时,创建了一个新节点......这是我的第一个 Qt 应用程序,所以我不完全理解应该设计我想要实现的功能。

如何正确绘制选择矩形? 我应该如何管理相互冲突的鼠标事件?

【问题讨论】:

    标签: user-interface qt4 qtgui


    【解决方案1】:
    • 您可以使用可检查按钮/操作(即 QPushButton/QAction 的可检查属性设置为“true”)在编辑和插入模式之间切换。然后检查鼠标事件中的状态并仅在处于插入模式时插入新项目。
    • 您还可以区分鼠标按钮 - 例如,在使用右键拖动时插入项目
    • 或使用 QKeyboardModifiers - 例如:拖动 + Ctrl - 插入项目。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      在鼠标事件重叠的情况下,你应该有一个地方(比如 QGraphicsView 来处理鼠标点击/移动事件)并创建一个状态机,然后根据你所处的状态来处理事件。你需要很好地规划您的架构,这可能是一项非常复杂的任务。

      • 设置您的状态枚举/常量
      • 在您的 if 条件中引用您的事件中的当前机器状态
      • 将您的“业务逻辑”放在一个地方

      就像这两个 NodeEditor 教程 #11 和 #12 中所示:https://www.youtube.com/watch?v=pk4v2xuXlm4https://www.youtube.com/watch?v=-VYcQojkloE)

      如果您仍想更深入地解释 Qt 的功能和事件,这里有一个完整的教程列表,其中包含实现所有可能的功能,例如将边缘拖动到节点、选择它们并删除它们、切割边缘、序列化等。 ,你可以看看我在这里记录的 50 个教程的完整列表:https://www.blenderfreak.com/tutorials/node-editor-tutorial-series/

      我将链接到整个列表,因为不可能在此页面上编写所有代码...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        相关资源
        最近更新 更多