Python是否适合QML(Qt-Quick)?

inb*_*thu 28 python qml qt-quick

我是Qt-Quick的初学者.我不知道Qt是QML的基础.而且我也不熟悉C++,它也是Qt和QML的主要支持语言.我知道JS可以在QML层中做很多逻辑.但是如果我们需要与OS进行交互,那么我们必须使用一些基本语言.由于我对Python感到满意,我正在计划" QML-JS-Python "组合.

所以,我的问题:

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

抱歉,如果我愚蠢地提出这些问题.但我想提出建议和意见.

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

提前致谢

Hen*_*all 29

从概念上讲,它们很好地结合在一起.我写了一个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扩展,因此您仍然可以使用该选项.

  • 从专业经验来看,我想补充一点,虽然PySide非常适合使用,它有一些值得注意的漏洞可以弹出并在你最不期望的时候让你失明.困扰我的一个值得注意的是无法在Python中创建可以使用正常信号连接逻辑并传入命名参数的信号.您必须使用hack并始终通过javascript连接到这些信号才能访问处理函数中的参数.基本上经过几个月的开发,我们真的希望我们使用C++来解决各种问题. (5认同)
  • 我会说有一些障碍,但它们不是无法克服的障碍.我遇到的唯一困难是从QML到python的层之间传递数据.如果您计划进行复杂的转换,那么使用C++会更容易.如果传递的数据保持简单,或者如果以序列化形式传递数据,则使用Python非常方便.tldr; 如果您计划与Qt后端进行大型复杂交互,那么从长远来看,最好使用C++. (2认同)
  • 请注意,PySide是Qt官方选择支持的绑定.我不确定这一切是多么重要,但是最后我检查过它最好使用PySt而不是PyQt. (2认同)
  • 伤心!仍然要知道PySide是LGPL,而您可能需要支付PyQt的商业许可证,除非您愿意接受其他许可证要求您开源所有代码.这适用于个人项目,但企业可能会遇到此问题. (2认同)

kas*_*aja 6

截至2016年4月,PySide 现已由Qt公司正式支持.

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