手码GUI或使用gui-designer工具

我想听一些关于手工编写GUI的意见,就像使用Java或Qt和C ++一样,而不是使用gui设计工具? GUI设计器工具的示例是MFC GUI设计器,Qt设计器,Interface Builder(Apple)。

我曾经是手工编码的粉丝,但从最近的经验我已经切换。 我用手动编码看到的问题是编写GUI非常快速和灵活,但是一旦你需要对很久以前编写的GUI进行更改,这可能会非常困难。 在大面板中找到正确的元素可能很困难。

第二个问题是,它很容易在GUI创建和布局代码中添加大量逻辑。 我经常不得不接管维护很难重复使用的GUI代码,因为它的行为与它的外观混合在一起,混合布局和行为通常使得这个类非常庞大且难以理解。

在我看来,使用GUI设计器工具可以在外观和逻辑之间实现更清晰的分离。

我强烈建议您使用界面构建器而不是手动编写GUI。 正如在提到的问题中,它是一个更清晰的分离,一旦必须编辑某些东西,它就会容易得多。

Qt Designer得到了这个function,可以用.ui文件创建一个类1) ,但我认为不使用这个特性是最好的方法,因为这会产生更多不应该存在的编码。 从.ui -file创建窗口的速度问题可以忽略不计,因为窗口只需加载一次。

这是PyQt,但在C ++中可能有类似的东西:

 class SelectDateDialog(QDialog): def __init__(self): QDialog.__init__(self) uic.loadUi("resources/SelectDate.ui", self) 

本质上,这与将所有UI代码包含在__init__()方法中具有相同的效果,但UI几乎完全与代码分离。

1) .ui文件是描述用户界面的XML文件

总是手工编写GUI设计 ,其中没有标准(或事实上的标准)GUI标记语言(与Java )。 这样做的原因是我发现使用GUI构建器设计工具会将您绑定到使用特定的IDE。 随着时间的推移,用于GUI设计和/或编写代码的最佳IDE将发生变化, 每个开发人员都可以自由选择他们认为最适合的IDE

我目前在哪里工作,我们有很多遗留的GUI,这些GUI是使用Netbeans Matisse GUI构建器编写的(当时我反对我的建议:-)。 这些现在几乎无法维护,因为所有开发人员都喜欢IntelliJ IDEA或Eclipse作为他们的IDE。 开发人员只是为了修改GUI布局(人们不会保持Netbeans项目定义同步等)而不是现实或可行的。

另一点是, 写出GUI布局代码的总时间可能只占给定项目总开发工作量5% 。 即使你自己编写代码需要两倍的时间,这也不会在宏观方案中产生太大的开销。 这对于长期可维护性来说是一个很小的代价。

只要您清楚将GUI布局逻辑与业务逻辑分离出来,我就不相信任何结果会受到影响。 这里没有人再使用GUI构建器了!

我是手工完成的,在应用程序内部重复使用面板并重新使用面板要容易得多(一些面板可以出现在几个地方)。

使用设计师在团队中工作时,艺术家应该使用GUI。

在大面板中找到正确的元素可能很困难。

?? 我从来没有见过这个。

有趣的是它已经反过来了。 从Winforms的角度来看,设计师生成的代码非常嘈杂,可能需要四分之一或一半的属性设置。 与设计师合作时,制作相当大的控件也更具诱惑力。 在Winforms设计器中更改某些控件层次结构在我眼中是一场噩梦。

在我的上一个项目中,我创建了其他API,以声明的方式在表单,dockmanagers,菜单,工具栏等中设置分割器。 这些是他们将进一步强制分离关注点。

我还尝试更多地依赖于自动布局function,这些function在WPF中确实更好,但在Windows窗体中也可以采用某种方式。

我强烈建议你在OS X上使用Interface Builder。如果你想学习,那么手工做是很好的,但你可以通过在实际项目中使用它来节省很多麻烦。 它真的非常强大。

至于Java和C ++,它取决于你正在做什么以及在什么平台上。 对于简单的应用程序,您可以从未看到UI代码。 但是,对于复杂的应用程序和富客户端,通常需要手动执行一些代码。

这取决于具体情况。 我认为两者都有自己的位置,我通常使用混合方法。

GUI构建器总是有些东西不能做(例如在Interface Builder中将颜色设置为UIColor常量)。 另一方面,大多数UI工作都非常普通(例如添加静态标签)。

我更喜欢在GUI构建器中执行普通的东西,以及代码中更有趣的东西。

另外,我偶尔也会手动编辑GUI构建器(在我的情况下使用Interface Builder和glade)生成的XML。

如果您正在设计包含大量条目表单和表格数据的业务应用程序,那么为UI编写代码比使用UI设计器更快,更易于维护。 在这些类型的应用程序中,几乎从不需要将一个元素精确地放置在屏幕上的预定义位置,而另一方面,有许多重复和设计约定可以简单地提取到单独的方法中。

以Eclipse或OpenOffice首选项对话框为例。 每个都有很多类别和一系列不同的选项。 如果你必须制作那么大的东西,手工设计每个屏幕是一项平凡的任务。 根据一些约定和默认值,更好的方法是编写将根据提供的域数据即时生成UI元素的代码。

我没有看到使用设计师如何促进更好的分离,也没有看到这种感知分离对任何事情都有帮助,因为你已经将业务逻辑保留在UI之外。

最后,如果您使用的是Java,请务必查看MigLayout 。 它适用于Swing和SWT,它的语法非常简洁明了,并且它具有令人难以置信的有用的调试模式。

我倾向于认为正确的答案取决于目标平台的文化。 在OS X上,Interface Builder是工具链中不可或缺的一部分,很难避免它。

在Java(awt或swing)中,反之亦然。 没有工具链支持。

实际上,你可以说,工具产生输出的方式。 Interface Builder生成.nib格式文件,这些文件特定于Cocoa在屏幕上放置控件的方式。 它理解什么是接口标记格式。 Java没有类似的概念。 一切都是编译类,因此更难以获得方便的结果。

GTK +与林间空地相结合,似乎在两者之间取得了合理的平衡。

没有什么能阻止混合这两种方法。 我经常在GUI设计器中制作表单的主要布局(因为它很快,你看到你正在做什么),然后放置一个或多个面板,然后用代码填充。 当GUI必须适应特定情况时,这尤其有用 – 例如,如果GUI必须根据连接的硬件进行更改。

无论如何,最重要的是确保GUI和应用程序逻辑分离。

我对此的看法:1。手工编码的GUI代码更加可重复使用2.布局问题对于设计人员来说更简单

如果您想要UI中包含一些非标准function,手动编码可能会很好。 您有更多的灵活性,但是您需要投入更多的时间来创建一个好的界面,因为Java / C ++语言并不意味着针对UI设计。

如果你有一个版本控制的加号,你可以查看更改的历史记录,使用二进制格式设计无法完成的事情,或者不是RCS友好的xml格式。

今天,大多数可视化设计UI的可用工具都缺少一些function。 它们不够灵活,某些function只能通过编码来实现。 此外,在某些情况下,生成的代码不是真正的人性化,如果您手动修改,您可能无法再继续使用设计器。

但如果设计简单,设计可以节省时间,我们希望设计师在未来能够得到改进,但我不会坚持不懈。

我的结论是,如果你今天需要灵活性,你必须手工编写界面,如果你想要简单快速的东西,那么设计师是最好的选择。

也许将来设计师会更强大,或者可能会有专门用于UI设计的新语言,这些语言更适合在C ++ / Java中使用,比如XUL或XAML。