QML vs Qt Designer与纯代码? (在PyQt的背景下)

时间:2014-08-21 16:54:16

标签: qt pyqt qt-designer

我是一个狂热的pythonista,希望建立我的第一个严肃的GUI桌面应用程序,似乎Qt是最好的选择,所以我开始学习它,我发现似乎有关如何构建界面的三个选项:

  • QML
  • Qt Designer
  • 纯代码(仅限python / C ++)

现在我试图弄清楚这三种方法的能力是否存在差异。我对三者都有同等程度的控制吗?有什么优点和缺点?

而且,我还有多少控制权?我可以自定义UI,如Spotify界面,几乎所有东西都是一个独特的自定义小部件吗?或者我是否仍然坚持开箱即用?

4 个答案:

答案 0 :(得分:5)

我通常使用Qt Designer来生成UI。有相当数量的选项,它可以让您粗略地了解用户界面的外观。

但是,不是将.ui文件编译成.py文件(可以是子类),而是使用PyQt4.uicPySide.QtUiTools在运行时动态加载ui。使用这些函数,你可以调用一个函数,将它传递给ui文件的路径,它将为你的顶级窗口小部件/窗口返回一个对象(为了下一个例子,我们会说它放在{{ 1}})。此对象具有您可以通过my_ui访问的所有其他ui元素的属性,其中my_ui.my_object_name是您在Qt Designer中为ui元素指定的名称。

使用这种方法意味着你:

  • 不必将ui文件编译为py文件
  • 仍然可以使用pythonic界面访问ui中的所有小部件,允许您配置小部件,就像使用纯代码创建小部件一样

Qt Designer还可以指定小部件促销,因此您可以在您的ui中插入基本的my_object_name(例如),但是当您加载它时,它可以自动提升为{{的子类1}}你已经制作和指定。因此,您可以在Qt Designer中设计UI的粗略形状,但在运行时可以轻松地将大多数组件提升为自定义小部件。

由于PySide和PyQt中与.ui文件加载器的接口不同,我将它们作为我维护的库(qtutils)的一部分进行封装,以便它们具有在运行时加载ui文件的通用接口并指定小部件促销。

我也没有任何QML经验,但根据我所听到的,它没有使用QWidgets那么强大。但是我认为正在编写/开发Qt库的人正在推动QML成为未来的发展方向。

我的建议是使用Qt Designer而不是纯代码,但是如果它能够满足您的需求,那么值得检查QML。

答案 1 :(得分:3)

在我的经验中,在你掌握了布局之后 - 一直都是纯粹的代码。没有子类,多重继承,项目中的其他文件的麻烦。您可以轻松创建帮助程序\专用类,以使GUI的构建非常简单。事实上,我认为这是一种常见的方式 - 使用Qt Designer来简化学习曲线,然后切换到纯代码。只是我的两分钱,YMMV。

答案 2 :(得分:2)

我已经和PyQt合作了一段时间(4年以上),我更喜欢为简单的应用程序编写UI;但除此之外,我使用Qt Designer。使用PyQt,您可以将设计器生成的.ui文件转换为.py文件,因此如果某些内容不完全符合您的喜好,您可以在代码中覆盖它(例如覆盖QWidgets等)。

至于编写具有漂亮UI的应用程序......好吧,Qt确实采用CSS进行样式化,但我不确定它的支持有多广泛。 QML是这个街区的新生儿,虽然我尚未开展工作,但我查看了一些示例,所有应用程序看起来都非常漂亮且编写起来相当简单 - 正如您可能知道的那样,它具有JavaScript风格的语法,我相信Spotify是用JS编写的(虽然我可能完全错了)。

例如,如果您是Windows开发人员,我会看到"常规" Qt vs QML有点像Windows 8的Windows Forms和XAML / Windows Store应用程序。

简而言之:是的,您可以自定义"外观'感觉" Qt应用程序很大,但我不确定与例如QML。

答案 3 :(得分:0)

我不是PyQt的专家。但是我在QWidgets和Qml方面有相当丰富的经验。我会随时选择Qml,因为它简单且易于编写GUI。您还可以完全控制GUI。使用QML,您几乎可以做任何事情。关于QML最好的事情是您可以为任何屏幕分辨率构建任何应用程序。意味着如果您为一个屏幕设计它,则可以确保该应用程序可以在任何屏幕上运行而无需修改img qml代码。由于其父子财产的依赖性。另一个最好的事情是,一旦您为Windows之类的平台构建。您可以为几乎没有代码更改的任何平台(如Linux,android,macOs,iOs)构建它。