如何在 QGraphicsScene 上进行选择?
Posted
技术标签:
【中文标题】如何在 QGraphicsScene 上进行选择?【英文标题】:How to make selection on QGraphicsScene? 【发布时间】:2011-02-21 16:12:20 【问题描述】:我正在使用图形视图框架在 Qt 中编写图表编辑器。 目前我只是想在 GraphScene (QGraphicsScene) 上创建一个简单的节点 (QGraphicsItem)。我创建了一个 Canvas (QGraphicsView) 并向其中添加了一个网格。我什至可以添加节点并在场景中移动它们。我的最终目标是拥有不同的工作模式、编辑和样式选项等。现在我只想知道如何为场景中已经存在的节点设置选择。我尝试用鼠标事件来做,但注意到事件调用选择和节点插入重叠......当我尝试选择一些东西时,创建了一个新节点......这是我的第一个 Qt 应用程序,所以我不完全理解应该设计我想要实现的功能。
如何正确绘制选择矩形? 我应该如何管理相互冲突的鼠标事件?
【问题讨论】:
【参考方案1】: 您可以使用可检查按钮/操作(即 QPushButton/QAction 的可检查属性设置为“true”)在编辑和插入模式之间切换。然后检查鼠标事件中的状态并仅在处于插入模式时插入新项目。 您还可以区分鼠标按钮 - 例如,在使用右键拖动时插入项目 或使用 QKeyboardModifiers - 例如:拖动 + Ctrl - 插入项目。希望这会有所帮助。
【讨论】:
【参考方案2】:在鼠标事件重叠的情况下,你应该有一个地方(比如 QGraphicsView 来处理鼠标点击/移动事件)并创建一个状态机,然后根据你所处的状态来处理事件。你需要很好地规划您的架构,这可能是一项非常复杂的任务。
设置您的状态枚举/常量 在您的 if 条件中引用您的事件中的当前机器状态 将您的“业务逻辑”放在一个地方就像这两个 NodeEditor 教程 #11 和 #12 中所示:https://www.youtube.com/watch?v=pk4v2xuXlm4 和 https://www.youtube.com/watch?v=-VYcQojkloE)
如果您仍想更深入地解释 Qt 的功能和事件,这里有一个完整的教程列表,其中包含实现所有可能的功能,例如将边缘拖动到节点、选择它们并删除它们、切割边缘、序列化等。 ,你可以看看我在这里记录的 50 个教程的完整列表:https://www.blenderfreak.com/tutorials/node-editor-tutorial-series/。
我将链接到整个列表,因为不可能在此页面上编写所有代码...
【讨论】:
以上是关于如何在 QGraphicsScene 上进行选择?的主要内容,如果未能解决你的问题,请参考以下文章
angularjs 如何在日期上进行验证。当我使用日期选择器时
当在另一个下拉列表上进行选择时,如何在 Django 的管理员中过滤下拉列表