如何解耦小部件的模型/视图

2024-03-14

我正在编写一个应用程序,用于绘制小部件/菜单/控件等以创建应用程序模型。每个屏幕都表示为小部件的集合,每个小部件都是简单的类,例如

class Model(object):
    def __init__(self):
        self.widgets = []

class Widget(object):
    def __init__(self):
        self.x, self.y = 0, 0
        self.w, self.h = 100,20
        self.text = "Widget"

现在用户可以在编辑器中编辑 x,y,w,h 并且它会在许多视图(位置)中渲染,渲染本身可能会更改 w 和 h,因为我们至少希望显示最佳拟合。 例如文本“Widget”在不同视图中可能需要宽度 200 或 205

问题:

那么问题是渲染/视图本身修改了模型,如何避免这种情况?现在我有主视图和主模型,任何其他视图如果想要渲染复制模型并渲染它,从而避免主模型的更改。

这种方法很简单,代码仍然简单,但需要不必要的模型副本,我想了很多方法来避免这种情况,但所有方法都会使代码复杂化,并且可能效率不高,因为无论如何,如果不复制模型,则渲染时间属性需要放置在某个地方,例如在每个小部件的每个渲染器中。

我正在用 python 实现它,但这与答案无关。


如果模型中渲染变化的唯一内容是 x、y、w、h,那么您有几个选择:

  1. 复制这些字段:x、y、w、h 和 x_drawn、y_drawn 等。渲染可以更改 _drawn 值,并使模型不介意它们已更改。例如,保存模型时,不要保存 _drawn 值。然后模型可以在渲染过程中发生变化,但这并不重要。

  2. 将 x,y,w,h 移动到 RenderedGeometry 类中,并为每个模型提供一个实例。现在您仍然可以复制模型,但它可以是浅复制,加上 RenderedGeometry 类的新副本,从而减少必须复制的数量。

  3. 将字段复制到 x_original、y_original 字段组中。在渲染之前,将 x,y 复制到 _original 字段中。渲染后,将它们复制回来。模型实例本身不必复制,只需复制少量数据即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解耦小部件的模型/视图 的相关文章

随机推荐

  • NOT IN 子查询的奇怪结果

    我有这个简单的查询 SELECT COUNT SalesOrderId FROM SalesOrder 结果是 14000 然后我有 SELECT COUNT SalesOrderId FROM SalesOrder WHERE Sales
  • Nuget Get-Project -All | 在哪里Add-BindingRedirect 获取其版本号?

    我正在尝试将我的解决方案中的所有 DLL 版本与许多项目同步 我注意到我的 app config 包含几个程序集绑定重定向 如下所示
  • 我无法很好地定位此按钮

    我现在已经研究了 1 5 小时 但我就是想不出一种方法来让它成为我想要的方式 我对网络上的所有事物都很陌生 并且需要花费同样多的时间 也许更多 来尝试将东西放在我想要的地方并以优雅的方式完成它 不管怎样 我有两个文本框 它们上面有两个标签
  • 如何从 git 终端编辑 .git / config 文件?

    我正在尝试从 git 终端修改配置文件 为此 在存储库内 我启动了命令git global edit 编辑器在同一终端中打开 我的问题是 如何保存更改并退出编辑器 每次我进行更改时 编辑器都会崩溃 我必须重新开始 有没有办法在终端之外更轻松
  • 使用 -classpath 运行时未检测到 Spring application.yml

    我是第一次使用 Spring 框架 特别是 Spring Boot 所以如果有一个明显的解决方案 请原谅我 在我的应用程序中 我有一个嵌入式 application yml 它为整个配置参数负载提供默认值 如果我使用以下命令运行 JAR 则
  • 模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用

    我的型号 public class EmployeeModel Required StringLength 50 Display Name Employee Name public string EmpName get set Requir
  • Java将GIF图像转换为PNG格式

    我必须构建一个 Java servlet 它接收图像并返回转换为 PNG 格式的图像 我怎样才能实现这个目标 正如一些示例所示 转换并不是指更改文件扩展名 提前致谢 试试这个 package demo import javax imagei
  • R 中 %in% 运算符的 C++ 版本

    C 中有没有相当于的函数 in R 中的运算符 考虑 R 中的以下命令 which y in x 我试图在 C 中找到等效的东西 特别是在犰狳中 但我找不到任何东西 然后我编写了自己的函数 与上面的 R 命令相比 它非常慢 这是我写的 in
  • 目前使用 Rails 构建 Facebook 应用程序的资源有哪些? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找使用 Rails 构建一个基本的 Facebook 应用程序 您推荐哪些资源 书籍 播客 截屏视频 博客文章等 请每个帖子一个答
  • 使用 Pandas.rolling 计算滚动自相关

    我正在尝试使用 Pandas 0 23 3 计算 Series 对象的滚动自相关 设置示例 dt index pd date range 2018 01 01 2018 02 01 freq B data np random rand le
  • 在 Perl 中可以将一个数组的地址分配给另一个数组吗?

    在以下 C 代码中 int X new int 2 X 0 1 X 1 2 int Y X X 1 3 执行后 Y 1 也将为 3 因为操作 Y X 不会进行克隆 而是将 X 所指向的引用或指针分配给 Y 如果在 Perl 5 下尝试相同的
  • constexpr 函数内的编译时或运行时检测

    当 C 11 中引入 constexpr 时 我很兴奋 但不幸的是我对其有用性做出了乐观的假设 我假设我们可以在任何地方使用 constexpr 来捕获文字编译时常量或文字编译时常量的任何 constexpr 结果 包括如下所示 const
  • 更新推送接收时应用程序图标上的徽章计数 (IOS)

    我正在开发可以从服务器接收推送通知的应用程序 从服务器发送推送通知时 您可以指定要在应用程序图标上显示的徽章编号 现在这意味着您必须跟踪服务器上的徽章计数 这似乎不是一个好的方法 有没有什么好的替代方案 这样我就不需要跟踪服务器上的徽章编号
  • 在 NSView 上使用 NSPoint 鼠标跟踪

    我在 App Delegate 中有一个方法可以创建窗口和内容视图 但我希望能够在进入和退出视图时使用 NSPoint 跟踪鼠标 问题是我不想创建 NSView 自定义类 而是想在我的 AppDelegate 中完成这一切 鼠标跟踪 底部
  • 简单的 PowerShell LastWriteTime 比较

    我需要一个 PowerShell 脚本来访问文件的属性并发现最后写入时间属性并将其与当前日期进行比较并返回日期差 我有这样的东西 writedate Get ItemProperty Path source Name LastWriteTi
  • 使用 Android Studio 未选择渲染目标

    我的 Android Studio 在 Activity main xml 中显示此问题 渲染问题未选择渲染目标 帮助 您需要运行 AVD 管理器来添加与您的项目设置的目标 API 版本相匹配的虚拟设备 单击工具 gt Android gt
  • Maven:如何重命名项目的war文件?

    我有一个项目bird具有以下组件pom xml
  • 具有内联模型表单或表单集的基于 django 类的视图

    我有以下型号 class Bill models Model date models DateTimeField Date of bill null True blank True class Item models Model name
  • 未找到 JSF2.0 标签

    最近我一直在玩 JSF2 0 Richface 3 3 3 我使用 STS 作为我的 IDE 和 Maven 来构建我的项目 但不知何故我无法让以下 JSF2 0 标签工作 h button h link f 元数据 f viewParam
  • 如何解耦小部件的模型/视图

    我正在编写一个应用程序 用于绘制小部件 菜单 控件等以创建应用程序模型 每个屏幕都表示为小部件的集合 每个小部件都是简单的类 例如 class Model object def init self self widgets class Wi