手编写的GUI与Qtdevise器GUI

我花这些假期学习写Qt应用程序。 我几个小时前就在读Qtdevise器,这让我想知道:在Qt中编写真实世界应用程序的人使用什么来devise他们的GUI? 事实上,人们如何devise一般的GUI?

例如,我发现手工编写代码在概念上比使用Qt Designer更简单,但对于复杂的GUI Designer来说也许是有意义的。 大型graphics用户界面可能可以使用devise器,但随着时间的推移,复杂度的增加可能会变得非常困难(这只是我的看法)。 我还下载了AmaroK的源代码,以便了解这些人正在做什么,并且发现了很多对addWidget()和朋友的调用,但是没有一个由Designer创build的XML文件(除此之外:AmaroK必须是我最喜欢的应用程序任何平台)。

那么,创buildGUI的“正确”方法是什么呢? devise师还是代码? 让我们来进行这个讨论,考虑以下types的GUI:

  1. 简单的对话只需要input,显示一些结果并退出。 假设一个应用程序需要一个YouTubeurl并将video下载到用户的硬盘上。 新手可能会开始的那种应用程序。
  2. 中级别的graphics用户界面(比如说一个带有一些工具栏/菜单项目的粘性笔记编辑器)。 以xPad为例( http://getxpad.com/ )。 我会说大多数应用程序属于“公用事业”类别。
  3. 非常复杂的GUI,像AmaroK或OpenOffice。 当你看到他们时,你知道他们,因为他们让你的眼睛stream血。

我们的devise经验是从Qt3开始的。

QT3

此时,Designer主要用于生成代码,然后编译到您的应用程序中。 我们开始为此目的而使用,但所有生成的代码,一旦你编辑它,你不能再返回并重新生成它,而不会失去你的编辑。 我们最终只是采取生成的代码,并从今以后一切手。

Qt4的

Qt4在Designer上有了很大的改进。 它不再只是生成代码,而是可以dynamic加载您的Designer文件(以xml格式), 并将它们dynamic连接到程序中正在运行的对象 – 不生成代码,但必须在Designer中命名这些项目并粘贴与名称不要破坏你的代码。

我的评价是,它远不如Mac OS X上的Interface Builder有用,但是现在我可以直接在程序中看到使用Designer文件。

自从Qt3以来,我们还没有移回到Designer,但是仍然使用它来进行原型和debugging布局。

对于你的问题:

  1. 你可能会逃避使用Qt提供的标准对话框。 QInputDialog或者如果你的子类QDialog,一定要使用QButtonDialogBox ,以确保你的button有适当的平台布局。

  2. 您可以使用有限的Designerfunction进行更有限的function,如xPad。

  3. 我不认为你可以用Designer来写OpenOffice这样的东西,但也许这不是重点。

我会使用Designer作为另一个工具,就像你的文本编辑器。 一旦你find了限制,尝试一个不同的工具来解决这个新问题。 我完全同意Steve S的观点,devise师的一个优点是,不是程序员的其他人可以做布局。

在我使用Qt Designer和其他工具包/ UI工具的经验中:

  • UI工具加速了工作。
  • 用户界面工具可以更轻松地稍后调整布局。
  • UI工具使得非程序员可以更轻松地操作UIdevise。

通过将devise分解为多个UI文件,通常可以在UI工具中处理复杂性。 在每个文件中包含小组逻辑组,并将每个组视为用于构build完整UI的单个小部件。 Qt Designer的提升小部件的概念可以帮助这个。

我还没有发现这个项目的规模有什么不同。 你的经验可能会有所不同

使用UI工具创build的文件(我想你可以手动编写它们,如果你真的想的话)通常可以在运行时dynamic加载(Qt和GTK +都提供这个function)。 这意味着您可以进行布局更改并进行testing,而无需重新编译。

最终,我认为原始代码和UI工具都是有效的。 它可能取决于环境,工具包/ UI工具,当然还有个人喜好。 我喜欢用户界面工具,因为他们使我快速运行,并在稍后进行简单的更改。

只是说我已经在Qt中编写和维护了复杂的GUI,而不使用Qt Designer – 并不是因为我不喜欢Qt Designer,而是因为我从来没有这样做过。

这部分是风格和你来自哪里的问题:当我开始使用Qt时,我曾经遇到过Dreamweaver和Frontpage等可视化HTML工具的糟糕体验,并且更喜欢用HomeSite编写代码,并且使用Photoshop进行棘手的布局问题。

视觉代码集成开发环境存在一个危险,你试图将其保留在可视化工具中,但最终也不得不对代码进行调整 – 这种方式不是很好理解。

学习iPhone开发,例如,我发现点击“魔术”可视化的东西(从“连接”检查器中的空白圆圈拖动到“接口生成器”窗口中的对象…),会变得更加简单我)用普通的旧代码来理解。

祝你好运Qt – 这是一个很好的工具包,但是你使用它,Qt Creator看起来像一个伟大的IDE。

我工作的组织几年前将它的GUI应用程序移植到Qt。 我认为有几个方面值得一提:

  • 至less在那个时候,使用Qt Designer并不是一个现实的select:Qt Designer无法完成的function太多了,
  • 必须保留的约定和结构阻止了Qt Designer的使用;
  • 一旦你开始没有devise师,可能很难回到它;
  • 但最重要的一点是,程序员非常习惯于使用vi或emacs进行编程,而不是使用GUI IDE。

我自己的经验,大约回来。 4年来,使用Qt3.3,是在对话框中的dynamic行为是不可能实现在devise器。

我想补充一点,使用graphicsdevise器的原因之一就是缺lessWin32中的布局pipe理器。 只有绝对的定位是可能的,而用手去做就会被吸引。

自从我从Delphi切换到Java的GUI应用程序(早在2002年),我就再也没有使用过devise师了。 我更喜欢布局经理。 是的,你会得到样板代码,但在UIdevise器上移动对象可能会花费与更换样板一样多的时间。 另外,我会被一个慢的IDE卡住; 这是对于Java / C#的情况下,确定,而对于Qt(特别是Qt4),它不适用。 对于Qt3,我想知道为什么要编辑生成的代码 – 是不是可以在其他文件中添加代码? 为什么?

关于讨论的情况:1)手编写的GUI可能会更快写入,至less如果你知道你的库。 如果你是一个新手,而且你不了解他们,那么你可以节省时间,并且不需要学习devise师,因为你不需要学习你使用的API。 但是“less学”是关键因素,所以在这两种情况下,我都会说手写编程GUI。

2)菜单栏非常讨厌编写代码。 另外,想像加速器等细节。 不过,这取决于你习惯了什么。 经过一段时间,键入这个样板可能比点击鼠标进入devise器来修正所有这些属性要快,但是如果你真的可以像打字机一样打字(就像那些inputUnix命令的pipe理员比使用任何GUI)。

3)我会把案例#2的答案扩展到这个。 请注意,对于Win32平台,使用生成Win32资源的devise人员可能会加载速度更快(不知道这一点)。

不过,我想提一下在这里使用Qt Designer的潜在问题。 真实世界的情况:花了几秒钟(比如说10)来加载一个复杂的Java对话框(一个程序员的文本编辑器的首选项对话框)和很多选项。 正确的解决方法是,只有当程序员想要看到它们(我意识到之后)时才加载每个选项卡,通过向每个首选项集添加单独的方法来构build其GUI。

如果您将所有的标签和标签切换器与devise师一起devise,您可以轻松地做到这一点吗? 我想可能有一个类似的例子,手工编写的GUI给你更多的灵活性,在这样一个大的应用程序,你可能需要,即使只是为了优化的目的。

奇怪的是,你说的写代码比在graphics环境中操作对象更简单。 这是一个明智之举。
devise师在那里让你的生活更轻松,从长远来看,它使你的代码更易于维护。 在devise器中查看你的用户界面看起来像什么,然后阅读代码并试图想象它会是什么样子,这样更容易。
使用当前的Qt,你可以完成devise器中几乎所有的事情,而且你可以做的事情很less,你可以在构造器中用几行代码修复。 举个最简单的例子 – 添加一个信号插槽连接。 使用devise器就像双击一样简单。 如果没有devise人员,您需要查找信号的正确签名,编辑.h文件,然后编辑.cpp文件中的代码。 devise师可以让你超越这些细节,专注于真正重要的事情 – 应用程序的function。

使用devise器创buildGUI的主要好处之一是其他程序员可以轻松地更改或维护窗体和小部件,而无需深入研究复杂的代码。

我想先转向devise人员开发GUI小部件。 正如其他职位所述,其速度更快。 您也可以得到即时反馈,看看它是否“看起来正确”,而不会让用户感到困惑。 devise师是我selectQt而不是其他工具包的主要原因。 我大多使用devise器来制作一次性的对话框。

话虽如此,我亲手做主窗口和任何复杂的小部件。 我认为这是奇趣科技的意图。 QFormLayout是一个他们提供的类,可以通过编程方式创build一个input对话框。

顺便说一下,Qt 4中的devise者并不是像Qt 3那样的IDE。它只是编辑.ui文件的编辑器。 我喜欢这样。 新的跨平台IDE将被称为Qt Creator。

这是一个旧的post,但我build议你看看克莱门汀 – 一个音乐播放器(我认为)从Amarok派生。 他们使用Qt4,从我可以看到在项目的src文件夹中有一个ui文件夹。 在ui文件夹中,人们可能会期望它们具有各种各样的.ui文件。 如果你编译并启动Clementine,你会看到GUI相当复杂,相当不错。

对我来说,这取决于在小部件/ GUI中封装了多less逻辑 。 如果只是简单的表单,我更喜欢使用QtDesigner。

如果它包含复杂的检查或交互,我倾向于编程。

如果有人需要创build一个Gui,我们正在使用Qt Designer。
事情就是为某些任务创build一些小部件(就像你在课堂devise中所做的那样),然后把它们组合成一个“父 – 贵”。

这样你的小部件具有高度的可重用性,可以用模块的方式用于Guis。 您只需指定每个Widget发送哪些信号以及提供哪些插槽。

另外,我们正在创build.ui-Files,这个文件比在构build过程中可能产生的文件要多。 到现在为止,没有必要手动编辑这些文件。

构build您的用户界面的不同部分
在使用QtDesigner的不同的.ui文件中,
然后把它们放在一起(并增加复杂性)代码。

有些东西你不能在Qt Designer中做,你只能在代码中做,
所以Qt Designer只是工具链中的一个(很棒的)部分。