Qt Designer与手工编码

时间:2010-11-06 18:04:40

标签: qt user-interface coding-style widget qt-designer

每次我使用某个图形工具包启动项目时,首先会遇到如何处理视觉设计和窗口小部件布局的冲突之一:图形工具还是手工编码?

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

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

6 个答案:

答案 0 :(得分:35)

我开始手工编写所有内容,并且最近已经转向使用Qt Designer进行大多数表单。以下是每个职位的一些好处:

使用Qt Designer

  • 对我来说最大的节省时间是管理复杂的布局;它可以节省繁琐的编码很多。简单(非常粗略地)排列小部件,选择它们,右键单击,并将它们放入正确的布局类型中。特别是当布局嵌套时,所以更容易。
  • 它倾向于保持您的实现文件更清晰,而不是用所有样板布局代码填充它们。我是A型,所以我喜欢它。
  • 如果您正在翻译您的应用程序,则可以向您的翻译人员发送.ui文件,以便他们可以在您的GUI上查看,他们正在翻译的文本将是。 (假设他们正在使用Qt语言学家。)

<强>手编码

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

<强>杂

  • 使用自动连接SLOTS和SIGNALS功能(基于命名约定,例如“on_my_button_clicked”。)我发现我几乎总是必须设置此连接确定时间,而不是每当Qt为我做的时候。
  • 对于QWizard表单,我发现我需要为每个页面使用不同的UI文件。你可以在一个中完成所有这一切,但是以任何一种自定义方式在页面之间进行通信变得非常尴尬。

总之,我从Qt Designer开始,让它尽可能地带我,然后从那里手工编写代码。关于Qt Designer生成的内容是一件好事 - 它只是另一个成为类成员的类,您可以根据需要访问它并进行操作。

答案 1 :(得分:15)

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

Qt Designer

    • 探索。了解可用的小部件,这些小部件的名称,可为每个小部件设置的属性等。
    • 强制将UI逻辑与应用程序逻辑分离。
    • 如果需要在运行时添加或删除小部件,则必须在代码中使用该逻辑。我认为将UI逻辑放在两个位置是个坏主意。
    • 更改嵌套布局。当布局中没有小部件时,它会折叠,并且很难将小部件拖放到所需的位置。

手动编码

    • 如果您对Qt非常熟悉,请快速。
    • 如果您需要在运行时添加或删除小部件,则是最佳选择。
    • 如果您有自己的自定义小部件,则比Qt Designer更容易。
    • 通过纪律,您仍然可以将UI布局与行为分开。只需将代码放在一个地方创建和布局小部件,然后用代码在另一个地方设置信号和插槽。
    • 如果你不熟悉Qt,那就慢。
    • 强制执行布局与行为的分离。

<强>提示

  • 不要只是跳进创建窗口。首先快速勾画几种可能的设计,无论是在纸上还是使用像Balsamiq Mockups这样的工具。虽然你可以在Qt Designer中做到这一点,但我认为在你决定它是否是最好的设计之前花费大量时间试图让你的窗户看起来恰到好处是太诱人了。

  • 如果您使用Qt Designer进行PyQt,您可以运行pyuic4以将* .ui文件编译为Python源文件。我发现很容易忘记这一步并抓住我的头脑,为什么我的改变不起作用。

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

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

答案 2 :(得分:4)

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

设计师只是令人沮丧 - 因为体面的拖放式sizer设计师已经存在了十多年,这是一个遗憾

答案 3 :(得分:1)

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

这包括创建应用程序UI的工作原理模型,并在运行时动态添加和删除小部件。有关此类模型的优秀示例(在不同的环境中),请查看glamour model以创建对象浏览器。

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

答案 4 :(得分:0)

我结合使用两者:

  1. 我发现x,y坐标,Designer是要走的路。

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

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

    是的,版本4很糟糕,但使用版本3的工作人员表示它真的很糟糕。很多崩溃。

    我和我的同伴QT真的希望第5版能够有所改进。

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

答案 5 :(得分:0)

我的个人观点(只是个人观点),所有基于GUI的开发都使我分心,当我看到gui对象时,我的想像力或思维能力很差,我更喜欢大部分时间手动编码,因为我的想像力更好,您知道,就像您正在读一本没有图像的书...当我看不到其他东西时,除了编写代码,它看起来像是我完成得更快...

第二个原因,我非常喜欢c ++,所以我看到手工编码的好处是,无论我是否编写多余的东西,我都会保持c ++的实践...仅使用时,编码能力得到了提高文字...的确,我可以使用nano或vim,但是调试起来太慢了。

在此处手动编码++投票