关闭。这个问题是基于意见的。它目前不接受答案。想改进这个问题?更新问题,以便可以通过编辑这篇文章用事实和引用来回答它。 3年前关闭。改进这个问题
我正在利用这些假期学习编写 Qt 应用程序。几个小时前,我正在阅读有关 Qt Designer 的文章,这让我想知道:在 Qt 中编写现实世界应用程序的人使用什么来设计他们的 GUI?事实上,人们一般是如何设计 GUI 的?
一方面,我发现手工编写代码在概念上比使用 Qt 设计器更简单,尽管对于复杂的 GUI 设计器可能有意义。使用 Designer 可能会使用大型 GUI,但随着时间的推移,随着复杂性的增加,它们可能会变得非常难以管理(这只是我的看法)。我还下载了 AmaroK 源代码来看看这些人在做什么,并发现许多对 addWidget() 和朋友的调用,但没有一个由 Designer 创建的 XML 文件(除此之外:AmaroK 必须是我最喜欢的应用程序)任何平台)。
那么,创建 GUI 的“正确”方法是什么?设计师还是代码?对于本次讨论,让我们考虑以下类型的 GUI:
只需要输入、显示一些结果并退出的简单对话框。让我们假设一个应用程序获取一个 YouTube URL 并将视频下载到用户的硬盘。新手可能会开始使用的那种应用程序。中级 GUI,例如带有一些工具栏/菜单项的便签编辑器。让我们以 xPad 为例 (http://getxpad.com/)。我想说大多数应用程序都属于“实用程序”类别。非常复杂的 GUI,例如 AmaroK 或 OpenOffice。当你看到他们时你就知道他们,因为他们让你的眼睛流血。
我们对 Designer 的体验始于 Qt3。
Qt3
那时,Designer 主要用于生成代码,然后将其编译到应用程序中。我们开始为此目的使用所有生成的代码,一旦您编辑它,您就不能再返回并重新生成它而不会丢失您的编辑。我们最终只使用生成的代码并从今以后手工完成所有事情。
Qt4
Qt4 对 Designer 进行了显着改进。它不再只生成代码,但您可以动态加载您的 Designer 文件(在 xml 中)和 dynamically connect them to the running objects in your program - 但是没有生成代码,您必须在 Designer 中命名项目并坚持使用名称以免破坏您的代码。
我的评估是它远不如 Mac OS X 上的 Interface Builder 有用,但在这一点上,我可以看到直接在程序中使用 Designer 文件。
自 Qt3 以来,我们还没有回到 Designer,但仍然使用它来制作原型和调试布局。
对于您的问题:
使用 Qt 提供的标准对话框,您可能会侥幸逃脱。 QInputDialog 或者如果您将 QDialog 子类化,请确保使用 QButtonDialogBox 以确保您的按钮具有正确的平台布局。您可能会做一些更有限的事情,比如带有有限 Designer 功能的 xPad。我不认为您可以仅使用 Designer 编写类似 OpenOffice 的东西,但也许这不是重点。
我会使用 Designer 作为另一种工具,就像您的文本编辑器一样。找到限制后,请尝试使用其他工具来解决该新问题。我完全同意 Steve S 的观点,即 Designer 的一个优势是非程序员的其他人也可以进行布局。
根据我使用 Qt Designer 和其他工具包/UI 工具的经验:
UI 工具加快了工作速度。
UI 工具使以后更容易调整布局。
UI 工具使非程序员更容易/可能进行 UI 设计。
复杂性通常可以在 UI 工具中通过将设计分解为多个 UI 文件来处理。在每个文件中包含小的逻辑组件组,并将每个组视为用于构建完整 UI 的单个小部件。 Qt Designer 的提升小部件概念可以对此有所帮助。
我还没有发现项目的规模有什么不同。您的体验可能会有所不同。
使用 UI 工具创建的文件(如果你真的想的话,我想你可以手动编写它们)通常可以在运行时动态加载(Qt 和 GTK+ 都提供此功能)。这意味着您可以更改布局并对其进行测试,而无需重新编译。
最终,我认为原始代码和 UI 工具都是有效的。它可能很大程度上取决于环境、工具包/UI 工具,当然还有个人偏好。我喜欢 UI 工具,因为它们能让我快速启动和运行,并允许以后轻松更改。
我工作的组织在几年前将其 GUI 应用程序移植到了 Qt。我认为有几个方面值得一提:
至少在那时,使用 Qt Designer 并不是一个现实的选择:有太多的功能无法使用 Qt Designer 完成;
必须保留的约定和结构阻止了 Qt Designer 的使用;
一旦您在没有 Designer 的情况下开始使用,可能很难再使用它;
不过,最重要的方面是程序员非常习惯于使用 vi 或 emacs 进行编程,而不是使用 GUI IDE。
我自己的经验,可以追溯到大约。 4年,使用Qt3.3,是在Designer中无法实现对话框中的动态行为。
只是说我在没有使用 Qt Designer 的情况下在 Qt 中编写和维护了复杂的 GUI——不是因为我不喜欢 Qt Designer,而是因为我从来没有用那种方式工作。
这部分是风格问题和你来自哪里:当我开始使用 Qt 时,我在 Dreamweaver 和 Frontpage 以及其他可视化 HTML 工具方面有过可怕的经历,并且更喜欢使用 HomeSite 编写代码并诉诸 Photoshop 进行复杂的布局问题。
可视化代码 IDE 存在危险,您尝试将其保留在可视化工具中,但最终也不得不调整代码 - 以人们不太了解的方式。
例如,学习 iPhone 开发时,我发现点击“魔术”视觉内容(“从 Connections 检查器中的空圆圈拖动到 Interface Builder 窗口中的对象......”)会更简单(对于我)用简单的旧代码来理解。
Qt 祝你好运——它是一个很棒的工具包,无论你如何使用它,Qt Creator 看起来都是一个很棒的 IDE。
我要补充一点,例如,使用图形设计器的原因之一是 Win32 中缺少布局管理器。只有绝对定位是可能的,而手动这样做会很糟糕。
自从我从 Delphi 切换到 Java 的 GUI 应用程序(早在 2002 年)之后,我就再也没有使用过设计器了。我更喜欢布局管理器。是的,你得到了样板代码,但在 UI 设计器上移动对象可能需要与更改样板代码一样多的时间。另外,我会被一个缓慢的 IDE 困住;这适用于 Java/C# 案例,好的,而对于 Qt(尤其是 Qt4)则不适用。对于 Qt3,我想知道为什么要编辑生成的代码——难道不能在其他文件中添加代码吗?出于什么原因?
关于讨论的案例: 1)手工编码的 GUI 可能会更快地编写,至少如果您知道您的库的话。如果您是新手并且不了解他们,您可能会节省时间并减少与设计师一起学习的内容,因为您不需要学习您使用的 API。但是“少学”是关键因素,所以在这两种情况下我都会说手工编码的 GUI。
2)菜单栏写代码很烦人。另外,请考虑加速器等细节。不过,这取决于您的习惯。一段时间后,输入样板文件可能比点击进入设计器来修复所有这些属性更快,但前提是你真的可以像打字机一样输入(比如那些输入 Unix 命令比输入更快的管理员)使用任何 GUI)。
3) 我会将案例#2 的答案扩展到这个案例。请注意,对于 Win32 平台,使用生成 Win32 资源的设计器可能会更快地加载(不知道这一点)。
但是,我想提一下在那里使用 Qt Designer 的一个潜在问题。真实案例:加载一个带有很多选项的复杂 Java 对话框(程序员文本编辑器的 Preferences 对话框)需要几秒钟(比如 10 秒)。正确的解决方法是仅在程序员想要查看它们时才加载每个选项卡(我后来意识到),通过向每个首选项集添加一个单独的方法来构建它的 GUI。
如果您与设计师一起设计所有选项卡和选项卡切换器,您可以轻松做到吗?我想可能有一个类似的例子,其中手动编码的 GUI 为您提供了更大的灵活性,并且在如此大的应用程序中,您可能需要它,即使只是为了优化目的。
使用设计器创建 GUI 的主要好处之一是其他程序员可以轻松更改或维护表单和小部件,而无需深入研究复杂的代码。
奇怪的是,您说编写代码比在图形环境中操作对象更简单。这是不费吹灰之力的。设计师的存在是为了让您的生活更轻松,从长远来看,它使您的代码更易于维护。在设计器中查看 UI 的外观会更容易,然后阅读代码并尝试想象它可能会是什么样子。使用当前的 Qt,您几乎可以在设计器中做所有事情,而您不能做的极少数事情,您可以在构造函数中用极少的代码行来修复。举个最简单的例子——添加一个信号槽连接。使用设计器就像双击一样简单。如果没有设计器,您需要查找信号的正确签名,编辑 .h 文件,然后在 .cpp 文件中编辑编写代码。设计器允许您超越这些细节并专注于真正重要的事情 - 您的应用程序的功能。
我喜欢先求助于设计师来开发 GUI 小部件。正如其他帖子中提到的,它更快。您还可以立即获得反馈,看看它是否“看起来正确”并且不会让用户感到困惑。设计师是我选择 Qt 而不是其他工具包的主要原因。我主要使用设计器来制作一次性对话框。
话虽如此,我还是手动完成了主窗口和任何复杂的小部件。我认为这就是奇趣科技的意图。 QFormLayout 是他们提供的用于以编程方式轻松创建输入对话框的类。
顺便说一句,Qt 4 中的设计器与 Qt 3 中的设计器不同。它只是一个用于编辑 .ui 文件的编辑器。我喜欢这样。新的跨平台 IDE 将被称为 Qt Creator。
这是一篇旧文章,但我建议您查看 Clementine - 一种(我认为)源自 Amarok 的音乐播放器。他们使用 Qt4,据我所知,项目的 src 文件夹中有一个 ui 文件夹。在 ui 文件夹中,正如人们所期望的那样,它们有各种各样的 .ui 文件。如果您编译并启动 Clementine,您会发现 GUI 相当复杂且非常漂亮。
对我来说,这取决于在小部件/GUI 中封装了多少逻辑。如果只是简单的表单,我更喜欢使用 QtDesigner。
如果它包含复杂的检查或交互,我倾向于对其进行编程。
如果有人需要创建 Gui,我们将使用 Qt Designer。问题是为某些任务创建小部件(就像你在类设计中所做的那样),然后将它们组合成一个“父 gui”。
这样,您的小部件具有高度可重用性,并且可以以模块化方式用于 Guis。您只需指定每个 Widget 发送哪些信号以及它们提供哪些插槽。
我们还创建了 .ui 文件,这些文件可以在构建过程中生成。到目前为止,无需手动编辑这些文件。
使用 QtDesigner 在不同的 .ui 文件中构建 UI 的不同部分,然后在代码中将它们组合在一起(并添加复杂性)。
有些事情你不能在 Qt Designer 中做,你只能在代码中做,所以 Qt Designer 只是工具链中的一个(伟大的)部分。
不定期副业成功案例分享