Qt Designer与手动编码

Sys*_*ank 36 user-interface qt coding-style widget qt-designer

每次我使用一些图形工具包开始一个项目时,最先发生的冲突之一就是决定如何处理视觉设计和小部件布局:图形工具还是手工编码?

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

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

Dav*_*eer 36

我开始做所有手工编码,最近一直在转向使用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生成的内容是一件好事 - 它只是另一个成为类成员的类,您可以根据需要访问它并进行操作.


pro*_*ter 16

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

Qt设计师

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

手工编码

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

提示

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

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

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

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


Mar*_*ett 5

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

设计师只是令人沮丧 - 遗憾的是,基于拖放尺寸器的优秀设计师已经存在了十多年