32

我是 Qt-Quick 的初学者。我不知道 Qt 是 QML 的基础。而且我也不熟悉 C++,它又是 Qt 和 QML 的主要支持语言。我知道 JS 可以在 QML 层本身做很多逻辑。但是如果我们需要与操作系统交互,那么我们必须使用一些基础语言。由于我对 Python 很熟悉,我正在计划“ QML-JS-Python ”组合。

所以,我的问题:

  1. 对于高级应用程序和游戏开发,Python 和 Qt-Quick 是否齐头并进?
  2. 我的组合三重奏(QML-JS-Python)是否足够好?
  3. 我是否需要学习 Qt 进行应用程序开发才能从 QML 与 Python 耦合?
  4. 如果 Qust 3 是,那么我应该学习完整的 Qt 还是只学习作为 Python 和 QML 之间通信门的那几行代码?

对不起,如果我在提出这些问题时很愚蠢。但我愿意接受建议和意见。

编辑:此组合 QML-JS-Python 的任何限制

提前致谢

4

2 回答 2

32

在概念层面上,它们很好地结合在一起。我编写了一个 python/qml/js/opengl 程序,它很好地结合了所有内容。那是 Qt4.7 和 PySide。

如果您只是使用 QML,您可以最大限度地减少您需要接触的 Qt 数量(尽管一如既往,更多的知识会让您变得更强大)。本质上,一旦你有了一个 qdeclarativeview,你的 Qt 工作就可以在信号/槽处理之外完成,这在 PySide 下是一种乐趣。我建议您可以使用 Python 和 QML 快速提高工作效率,而不必过多担心 Qt 方面的问题,并根据需要选择它。

根据经验,我建议在你自己的脑海中明确 Python 和 QML 之间的界限。我将 QML 限制在 GUI 逻辑上,它做得很好;实际上,QML 处理接口如何响应输入,然后将信号发送回主程序。它的工作方式有点像在 GUI 和程序的其余部分之间创建一个非常基本的、精简的接口,只发出高级逻辑信号(而不是,例如,发回点击,它会发回一个信号,例如“打开处理”,GUI 将处理如何呈现该更改)。就我而言,这只是直接插入到我的 MVC 框架中,但您可以按照自己的喜好进行操作。

尽管如此,有一个很大的警告。PySide 的开发相当停滞,目前不支持 Qt5 及其所有 QML 改进优点。关于应该如何支持它已经有各种讨论,但没有多少实际代码提交。

我相信 PyQt 支持 Qt5,但作为 GPL 或商业双重许可(PySide 是 LGPL,因此可以与封闭源代码一起使用)。我没有 PyQt 的经验,除此之外,PySide 几乎是一个替代品。

好像我在谈论将其用作MVVM

(任何限制问题):整个 Qt 通过 PySide 和 PyQt 暴露出来。这意味着您可以像在 C 中一样在 Python 中编写扩展。我编写了一个捕获鼠标滚动事件的小部件,因此我可以从 Flickable 中窃取滚动。这是一个用 Python 创建的 QML 元素,尽管我也必须从 Python 加载它;我不太清楚如何创建一个可以从 QML 文档中加载的扩展。当然可以编写一个独立于主代码的 C 扩展,因此您仍然可以选择。

编辑:PySide2现在是一个东西并支持 Qt5。

Edit2:截至 2021 年,Pyside 现在被称为QT For Python,并且在 QT6 之前得到了极大的支持。请务必记下许可证。

于 2013-03-14T10:17:54.430 回答
7

截至 2016 年 4 月,PySide现在得到 Qt 公司的正式支持。

官方主页在这里。LGPL 许可是一种选择,这似乎是最初创建该项目的主要原因。

于 2016-05-07T05:22:19.130 回答