代码之家  ›  专栏  ›  技术社区  ›  SystematicFrank

Qt设计器与手工编码

  •  34
  • SystematicFrank  · 技术社区  · 14 年前

    这是一个相当棘手/主观的问题,因为大多数人会根据个人喜好来决定。它也在很大程度上取决于图形工具的质量。在这种情况下,我只想关注QT库的最新版本。我不打算讨论哪种方法更好。我相信最好的答案是:取决于项目。

    我想要的是参考一篇好的没有偏见的文章,根据经验后几个项目。这篇文章应该只描述两种选择的权衡

    5 回复  |  直到 11 年前
        1
  •  36
  •   Dave Mateer    12 年前

    我开始做所有手工编码的事情,最近已经切换到对大多数表单使用Qt设计器。以下是每个职位的一些好处:

    • 对我来说,最大的节省是管理复杂的布局;它节省了 许多 无聊的编码。简单地(非常粗略地)排列小部件,选择它们,右键单击,并将它们放置在正确的布局类型中。尤其是当布局变得嵌套时,这是 所以
    • 它倾向于保持实现文件的干净,而不是用所有样板布局代码填充它们。我是A型的,所以我喜欢。
    • 看见

    手工编码

    • 控制。如果您的布局需要以非常特殊的顺序实例化/初始化控件,或者根据其他条件(数据库查找等)动态创建控件,这是最简单的方法。
    • 如果您有定制的小部件,您可以使用设计器,添加最接近的内置QWidget,从中派生类,然后“升级”它。但是,除非将小部件作为单独项目中的一个设计器插件,否则您将看不到它的预览,这对于大多数用例来说是太多工作了。

    其他

    • 不要
    • 为了 QWizard 表单,我发现我需要为每个页面使用不同的UI文件。你可以一次完成所有的工作,但是以任何一种定制的方式在页面之间进行交流会变得非常尴尬。

        2
  •  18
  •   procrastinate_later    12 年前

    我的答案是基于两年来使用PyQt4(Python绑定到Qt 4)和OpenGL开发生物化学应用程序。我还没有做C++ QT,因为我们只使用C++来执行性能关键算法。也就是说,PyQt4 API与Qt4非常相似,所以这里仍然适用。

    • 很好
      • 探索。了解可用的小部件、这些小部件的名称、可以为每个小部件设置的属性等。
    • 坏的
      • 如果需要在运行时添加或删除小部件,则必须在代码中包含该逻辑。我认为把你的UI逻辑放在两个地方是个坏主意。

    手工编码

      • 如果你对Qt很熟悉的话,那就快。
      • 如果需要在运行时添加或删除小部件,则是最佳选择。
      • 如果您有自己的自定义小部件,那么比Qt设计器更容易。
      • 使用规程,您仍然可以将UI布局与行为分离。只需将创建和布局小部件的代码放在一个地方,将设置信号和插槽的代码放在另一个地方。
    • 坏的

      • 没有 执行 布局与行为的分离。

    • 不要一下子就开始创建你的窗口。首先,快速勾画几个可能的设计,要么在纸上,要么使用像Balsamiq模型这样的工具。虽然你可以在Qt Designer中完成这项工作,但我认为在你决定是否是最好的设计之前,花很多时间让你的窗口看起来非常诱人。

    • 如果使用Qt Designer for PyQt,则需要运行pyuic4来将*.ui文件编译为Python源文件。我发现很容易忘记这一步,抓挠我的头一秒钟为什么我的改变不起作用。

    • 如果你手工编写你的用户界面,我建议把你的布局代码放在一个地方,把你的信号和插槽放在另一个地方。这样做可以更容易地更改窗口上小部件的排列方式,而不会影响任何应用程序逻辑。或者您可以更改一些行为,而不必遍历所有布局代码。

    享受Qt!现在我使用Java Swing工作,我很怀念它。

        3
  •  4
  •   Martin Beckett    14 年前

    我倾向于使用设计器来布局对话框,但我在主代码中做所有的事件处理工作。我也做所有的主窗口,工具栏,菜单的直接代码。

    设计师只是令人沮丧-很遗憾,因为体面的拖放大小的设计师已经存在了十多年了

        4
  •  1
  •   Stephan Eggermont    12 年前

    这取决于应用程序所需的不同窗口/面板的数量。如果数字很小,请使用图形工具。有几个窗户设计得很好要快得多。如果数量很大,图形工具只能(而且应该)用于原型。您需要对布局进行编码,以便能够以可接受的成本进行应用程序范围的更改。

    这包括创建应用程序UI如何工作的模型,以及在运行时动态添加和删除小部件。对于这样一个模型的优秀示例(在不同的环境中),请查看 glamour model 用于创建对象浏览器。

    我反对这样的说法,即它是复杂的/主观的(至少比其他开发选择更复杂)。很容易想出决定的标准。个人经验和偏好对这一点很重要,因为它们决定了何时应该将不同窗口的数量视为小窗口。工具质量也是如此。

        5
  •  -1
  •   Wes    12 年前

    我将两者结合使用:

    1. 其他许多UI属性等都可以在代码中设置。

    我认为尝试完全手工编写UI将是一个非常耗时的项目。它不像设置HTML表那么简单。

    是的,版本4很糟糕,但是工作中使用过版本3的人说它真的很糟糕。很多撞车。

    一、 和我的同事们一起,真的希望版本5能有所改进。

    我知道这是个老问题,但我希望这能有帮助!一个人的经历。