【发布时间】:2011-04-09 20:02:33
【问题描述】:
我想在 Qt 中构建一个流程图应用程序来练习建模 GUI 应用程序。它只有可拖动的框和可以用直线连接的圆圈。
由于这是我的第一个 GUI 应用程序,我不确定通常如何设计这样的项目。这是我的两个设计。
1) 构建一堆模型类(Box、Circle、Line 等)和相关视图(例如 BoxView、CircleView 等)。模型对象具有颜色、x、y、宽度、高度等属性。视图类是 Qt UI 元素的子类。然后有像 BoxMoveController 这样的控制器,它从 UI 接收鼠标事件并适当地更新盒子视图和盒子模型。或者如果盒子视图接收到事件,更新自己,然后将事件传递给控制器来更新模型可能会更好?现在,我为模型上工作的流程图逻辑创建应用程序逻辑(例如将线连接到框)。当模型发生更新时,UI 会通过模型通知视图对象来相应地更新自身。
2) 忘掉模型的东西,构建一个“以视图为中心”的应用程序。构建一组 Qt UI 元素子类的类(Box、Circle、Line 等)。然后在这些类之上为流程图构建应用程序逻辑。
哪个更好?你会有什么不同的做法?
【问题讨论】:
-
我不会为图表元素使用小部件。这不是小部件的用途。根据平台的不同,您可能会遇到透明度问题,例如(鼠标)重叠小部件之间的事件处理。由于小部件是普通矩形,因此您必须在小部件中进行“碰撞检测”,然后执行或传递事件,但实际上“命中”的同级小部件不会收到事件,而是“画布小部件”等......在Qt中这样的自然选择是QGraphicsView。
标签: model-view-controller design-patterns qt architecture