0

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

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

4

2 回答 2

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

希望这可以帮助。

于 2011-02-21T18:55:01.167 回答
0

如果鼠标事件重叠,你应该有一个地方(比如 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/ 。

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

于 2019-06-29T18:10:09.847 回答