每次我使用一些图形工具包启动项目时,就会决定如何处理视觉设计和小部件布局:图形工具或手工编码时,就会发生第一个冲突之一?

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

我想要的是基于几个项目后的经验来提及一篇良好的无偏见文章。本文应仅描述这两种选择的权衡

有帮助吗?

解决方案

我开始做所有手工编码的事情,最近一直在切换到大多数形式的QT设计器。以下是每个职位的一些好处:

使用QT设计师

  • 对我来说,节省时间最大的是管理复杂的布局。它保存一个 很多 乏味的编码。只需(非常粗略)安排小部件,选择它们,右键单击,然后将其放置在正确的布局中。特别是当布局嵌套时,这是 所以 容易得多。
  • 它倾向于使您的实现文件更清洁,而不是用所有样板布局代码填充它们。我是A型,所以我喜欢。
  • 如果您要翻译应用程序,则可以将转换器发送给.UI文件,以便他们可以 在您的GUI上,他们要翻译的文字将是。 (假设他们正在使用QT语言学家。)

手工编码

  • 控制。如果您有一个布局需要以非常特定的顺序实例化 /初始化控件,或者根据其他条件(数据库查找等)动态创建控件,这是最简单的方法。
  • 如果您有自定义的小部件,则可以使用设计器,并添加最接近的内置Qwidget,从而从中派生,然后“升级”它。但是,除非您将其作为单独的项目中的设计师插件制作,否则您不会看到小部件的预览,这对于大多数用例而言,这太多了。
  • 如果您有自定义的小部件,可以在可选的Qwidget父母之外使用其构造函数中的参数,设计师将无法处理。您别无选择,只能手动添加该控件。

各种各样的

  • 一世 使用自动连接插槽和信号功能(基于命名约定,例如“ on_my_button_clicked”)。我发现我几乎总是必须在确定的时间设置此连接,而不是QT对我而言。
  • 为了 QWizard 表单,我发现我需要为每个页面使用其他UI文件。您可以一一完成所有操作,但是以任何自定义方式在页面之间进行交流非常尴尬。

总而言之,我从QT设计师开始,让我尽可能地将其从那里手工编码。这是QT Designer生成的一件好事 - 这只是另一个成为班级成员的班级,您可以根据需要访问并操纵它。

其他提示

我的答案是基于两年使用PYQT4(与QT 4)和OpenGL开发生物化学应用的。我尚未完成C ++ QT,因为我们仅将C ++用于性能至关重要算法。也就是说,PYQT4 API非常类似于QT4,这里仍然适用。

QT设计师

  • 好的
    • 勘探。发现有哪些小部件可用,这些小部件的名称,可以为每个小部件设置的属性,等等。
    • 强制将UI逻辑与应用程序逻辑分开。
  • 坏的
    • 如果您需要在运行时添加或删除小部件,则必须在代码中具有该逻辑。我认为将您的UI逻辑放在两个地方是一个坏主意。
    • 更改嵌套布局。当布局中没有小部件时,它会崩溃,并且很难将小部件拖动到所需的位置。

手工编码

  • 好的

    • 如果您对QT非常熟悉,请快。
    • 最佳选择,如果您需要在运行时添加或删除小部件。
    • 如果您拥有自己的自定义小部件,则比QT设计师更容易。
    • 使用纪律,您仍然可以将UI布局与行为分开。只需将代码放在一个地方创建和布局小部件,然后将代码设置为在另一个位置设置信号和插槽即可。
  • 坏的

    • 如果您是QT的新手,请慢。
    • 才不是 执行 布局与行为的分离。

尖端

  • 不要只是跳入创建窗户。首先快速在纸上或使用诸如Balsamiq模型之类的工具上绘制几种可能的设计。尽管您可以在QT Designer中这样做,但我认为花很多时间试图让您的窗户看起来正确,甚至在您决定是否是最佳设计之前,这太诱人了。

  • 如果您将QT Designer用于PYQT,则需要运行PYUIC4的额外步骤,将 *.UI文件编译为Python源文件。我发现很容易忘记这一步骤,并抓住我的头一秒钟,为什么我的更改不起作用。

  • 如果您手工编码UI,建议将您的布局代码放在一个地方,然后将您的信号和插槽放在另一个位置。这样做可以更轻松地更改小部件在窗口上排列的方式,而不会影响任何应用程序逻辑。或者,您可以更改某些行为,而无需涉及所有布局代码。

享受QT!现在我正在使用Java Swing上班,我想念它。

我倾向于使用设计人员布局对话框,但我会在主代码中进行所有事件处理内容。我还用直接代码执行所有主窗口,工具栏,菜单。

设计师只是令人沮丧的 - 可惜,因为基于Sizer的不错的拖放设计师已经存在了十多年

这取决于应用程序所需的不同窗口/面板的数量。如果数字很小,请使用图形工具。完美设计一些窗户的速度要快得多。如果数字很大,则图形工具可以(并且应该)仅用于原型。您需要对布局进行编码,以便能够以可接受的成本进行全应用更改。

这包括创建一个模型,了解应用程序的UI如何工作以及在运行时动态添加和删除小部件。对于这种模型的绝佳例子(在不同的环境中),请看一下 魅力模型 用于创建对象浏览器。

我反对这样的建议:它是棘手/主观的(至少比其他开发选择更多)。很容易提出标准来决定。个人经验和偏好对此很重要,因为他们决定何时应将不同窗口的数量视为较小。工具质量也是如此。

我将两者的组合结合在一起:

  1. 我发现X,Y坐标,设计师是必经之路。

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

我认为尝试通过手工编码完全进行UI将是一个非常耗时的项目。它并不像设置HTML表那样简单。

是的4版很糟糕,但是在工作中使用3版的人说这真的很糟糕。很多崩溃。

我和我的Qters一起真正希望第5版将是一个改进。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top