【问题标题】:QML vs Qt Designer vs pure code? (in context of PyQt)QML vs Qt Designer vs 纯代码? (在 PyQt 的上下文中)
【发布时间】:2014-08-21 16:54:16
【问题描述】:

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

  • QML
  • Qt 设计器
  • 纯代码(仅限 python/C++)

现在我想弄清楚这三种方法的功能是否存在差异。我对这三个人的控制权是否相同?有什么好处和坏处?

此外,我有多少控制权?我可以将 UI 自定义到一个很好的程度,例如 Spotify 界面,其中几乎所有东西都是一个独特的自定义小部件吗?或者我是否坚持使用或多或少通用的开箱即用外观?

【问题讨论】:

标签: qt pyqt qt-designer


【解决方案1】:

我通常使用 Qt Designer 来制作 UI。有很多可用的选项,它可以让您大致了解您的 UI 的外观。

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

使用这种方法意味着您:

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

Qt Designer 还具有指定小部件升级的能力,因此您可以将基本的QLabel(例如)插入到您的 ui 中,但是当您加载它时,它可以自动升级为 QLabel 的子类您已经制定并指定。因此,您可以在 Qt Designer 中设计 UI 的粗略形状,但在运行时轻松将大部分组件提升为自定义小部件。

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

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

因此,我的建议是使用 Qt Designer 而不是纯代码,但值得一试 QML,以防它足以满足您的需求。

【讨论】:

    【解决方案2】:

    根据我的经验,在您掌握了布局之后 - 一直都是纯代码。项目中的子类、多重继承、附加文件没有任何麻烦。并且您可以轻松创建助手\专业类,使 GUI 的构建变得非常简单。其实我觉得是一种常用的方式——使用Qt Designer来缓和学习曲线,然后切换到纯代码。只是我的两分钱,YMMV。

    【讨论】:

      【解决方案3】:

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

      至于用漂亮的 UI 编写应用程序......好吧,Qt 确实采用 CSS 来进行样式设置,尽管我不确定它的支持范围有多大。 QML 是新手,虽然我还没有研究过它,但我查看了一些示例,所有应用程序看起来都很漂亮,而且编写起来相当简单——你可能知道,它具有 JavaScript 样式的语法,并且我相信 Spotify 是用 JS 编写的(尽管我可能完全错了)。

      例如,如果您是 Windows 开发人员,我看到“常规”Qt 与 QML 的方式有点像 Windows 8 的 Windows 窗体和 XAML/Windows Store 应用程序。

      简而言之:是的,您可以极大地自定义 Qt 应用程序的“外观”,但我不确定这与例如QML。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2014-10-22
          • 2012-09-24
          • 2022-08-16
          • 1970-01-01
          • 2017-08-07
          • 1970-01-01
          • 1970-01-01
          • 2020-01-02
          • 1970-01-01
          相关资源
          最近更新 更多