32

私はQt-Quickの初心者です。QMLの基礎となるQtを知りません。また、QtとQMLの両方で主にサポートされている言語であるC++にも精通していません。JSはQMLレイヤー自体で多くのロジックを実行できることを私は知っています。ただし、OSとの対話が必要な場合は、基本言語を使用する必要があります。私はPythonに慣れているので、「QML-JS-Python」の組み合わせを計画しています。

だから、私の質問:

  1. 高度なアプリケーションおよびゲーム開発の場合PythonとQt-Quickは連携してうまく機能しますか?
  2. 私のCombinationTrio(QML-JS-Python)はこれで十分ですか?
  3. また、QMLからPythonと結合するためのアプリ開発用のQtを学ぶ必要がありますか?
  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での喜びです。Qt側のことをあまり気にせず、必要に応じてPythonとQMLを使用して、迅速に生産性を高めることができることをお勧めします。

経験から、PythonとQMLの境界を自分の頭の中で明確にすることをお勧めします。私はQMLをGUIロジックに非常に制限しました。これは非常にうまく機能します。実際、QMLはインターフェイスが入力にどのように応答するかを処理し、メインプログラムに信号を送り返します。これは、GUIとプログラムの残りの部分との間に非常に基本的な簡素化されたインターフェイスを作成するのと少し似ており、高レベルのロジックのみを通知します(たとえば、クリックを返送するのではなく、たとえば「処理をオンにします」、GUIはその変更をレンダリングする方法を処理します)。私の場合、これはMVCフレームワークに直接接続されていますが、好きなように行うことができます。

ただし、これには大きな注意点が1つあります。PySideの開発はかなり行き詰まっており、現在Qt5とそのすべてのQML改善機能をサポートしていません。それがどのようにサポートされるべきかについて様々な議論がありましたが、実際のコードはあまりコミットされていません。

PyQtはQt5をサポートしていると思いますが、GPLまたは商用のいずれかとしてデュアルライセンスされています(PySideはLGPLであるため、クローズドソースコードで使用できます)。私はそれ以外にPyQtの経験はなく、PySideはお互いの代わりにほぼ落ち込んでいます。

MVVMとして使用することについて話しているようです。

(制限に関する質問):Qt全体がPySideとPyQtを介して公開されます。これは、Cの場合と同じようにPythonで拡張機能を記述できることを意味します。Flickableからスクロールを盗むことができるように、マウスのスクロールイベントをキャプチャするウィジェットを作成しました。これはPythonで作成されたQML要素でしたが、Pythonからもロードする必要がありました。QMLドキュメント内からロードできる拡張機能を作成する方法を完全に理解することができませんでした。もちろん、メインコードに対してスタンドアロンのC拡張機能を作成することも可能であるため、常にそのオプションを利用できます。

編集:PySide2はThingになり、Qt5をサポートします。

Edit2:2021年現在、PysideはQT For Pythonとして知られており、QT6までは非常にサポートされています。ライセンスをメモしておいてください。

于 2013-03-14T10:17:54.430 に答える
7

2016年4月の時点で、PySideはQtCompanyによって正式にサポートされています。

公式ホームページはこちらです。LGPLライセンスはオプションであり、これがプロジェクトが最初に作成された主な理由のようです。

于 2016-05-07T05:22:19.130 に答える