QT设计师vs手工编码
-
29-09-2019 - |
题
每次我使用一些图形工具包启动项目时,就会决定如何处理视觉设计和小部件布局:图形工具或手工编码时,就会发生第一个冲突之一?
这是一个非常棘手/主观的问题,因为大多数人都会根据个人喜好做出决定。它还在很大程度上取决于图形工具的质量。在这种情况下,我只想将重点放在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如何工作以及在运行时动态添加和删除小部件。对于这种模型的绝佳例子(在不同的环境中),请看一下 魅力模型 用于创建对象浏览器。
我反对这样的建议:它是棘手/主观的(至少比其他开发选择更多)。很容易提出标准来决定。个人经验和偏好对此很重要,因为他们决定何时应将不同窗口的数量视为较小。工具质量也是如此。
我将两者的组合结合在一起:
我发现X,Y坐标,设计师是必经之路。
可以在代码中设置许多其他UI属性等。
我认为尝试通过手工编码完全进行UI将是一个非常耗时的项目。它并不像设置HTML表那样简单。
是的4版很糟糕,但是在工作中使用3版的人说这真的很糟糕。很多崩溃。
我和我的Qters一起真正希望第5版将是一个改进。
我知道这是一个古老的问题,但我希望这会有所帮助!一个人的经历。