Python与QML(Qt-Quick)配合得好吗?

Python与QML(Qt-Quick)配合得好吗?,python,qml,qt-quick,Python,Qml,Qt Quick,我是Qt Quick的初学者。 我不知道Qt是QML的基础。 而且我不熟悉C++,它又是QT和QML的主要支持语言。 我知道JS可以在QML层本身执行很多逻辑。但是如果我们需要与操作系统交互,那么我们必须使用一些基本语言。由于我熟悉Python,所以我计划将“QML-JS-Python”组合在一起 所以,我的问题是: 对于高级应用程序和游戏开发,Python和Qt-Quick是否能齐头并进 我的组合Trio(QML JS Python)是否足够好 我是否需要学习Qt for App develo

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

所以,我的问题是:

  • 对于高级应用程序和游戏开发,Python和Qt-Quick是否能齐头并进
  • 我的组合Trio(QML JS Python)是否足够好
  • 我是否需要学习Qt for App development,以便与QML中的Python进行耦合
  • 如果对qust3是,那么我应该学习完整的Qt,还是只学习作为Python和QML之间的通信门的那几行代码
  • 对不起,如果我提这些问题很傻的话。但我想听取一些建议和意见

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


    提前感谢

    在概念层面上,它们配合得非常好。我已经编写了一个python/qml/js/opengl程序,它将所有内容都很好地结合在一起。这就是Qt4.7和PySide

    如果您只是使用QML,您可以将需要接触的Qt数量降至最低(不过,一如既往,更多的知识会让您更强大)。本质上,一旦您有了QdeCrativeView,您的Qt工作就可以在信号/插槽处理之外完成,这在PySide下是一种乐趣。我建议您可以快速高效地使用Python和QML,而不必过多地担心Qt方面的问题,并在必要时进行学习

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

    不过,在这一切中有一个巨大的警告。PySide的开发已经相当停滞,目前不支持Qt5及其所有QML改进功能。关于如何支持它,已经有过各种各样的讨论,但实际提交的代码并不多

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

    好像我说的是把它当作一个工具

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

    编辑:现在是一个东西,支持Qt5


    Edit2:到2021年,Pyside现在被称为,并且在QT6之前(包括QT6)都得到了广泛的支持。请务必记下许可证。

    自2016年4月起,PySide已得到Qt公司的正式支持


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

    为什么不将其保留为JS?一种动态语言就足够了,而且JS的性能比Python更好。对于Qt,您需要C++来扩展QML和JS,以将QML组件绑定在一起。在此上下文中,Python是一个冗余工具。可以使用Python组件扩展QML。根据冗余参数,除汇编程序外,所有语言都是冗余的。JS和Python显然是不同的。在QML之外拥有严肃的程序逻辑可能是一件非常好的事情。@ddriver,正如我在问题中提到的,为了与操作系统建立通信,我们需要一些基础语言。所以,我更喜欢Python,因为我对它不太熟悉。根据专业经验,我想补充一点,虽然PySide非常适合使用,但它有一些值得注意的漏洞,可以在你最不经意的时候突然出现,让你看不见它。困扰我的一个值得注意的问题是无法在Python中创建可以使用正常信号连接逻辑并已传入命名参数的信号。您必须使用hack并始终通过javascript连接到这些信号,以便访问处理程序函数中的参数。基本上经过几个月的发展,我们真的希望我们是在C++由于不同的问题。我会说,有一些障碍,但它们不是障碍不能克服。我遇到的唯一几个困难是在从QML到python的层之间传递数据。如果你计划做复杂的转换,那么使用C++更容易。如果在这些对象之间传递的数据保持简单,或者以序列化形式传递内容,那么使用Python非常方便。太长,读不下去了如果你计划和QT后端做复杂的交互,那么从长远来看,你最好使用C++。我认为问题是UI逻辑与业务逻辑可以分开。不管怎么说,确保这一点可能是很好的纪律。这可能是一种思维方式,如果您假设您将在QML/js中进行UI工作,并且只与后端通信