2013-03-14 14 views
24

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

だから、私の質問:

  1. 高度なアプリケーションやゲーム開発のためには、Python & Qtは、クイック手でよく手をしますか?
  2. 私のコンビネーショントリオ(QML-JS-Python)は十分ですか?
  3. QMLからPythonと結合するためのApp開発用のQtを学ぶ必要がありますか?
  4. Qust 3の場合は、Qtを完全に習得するか、PythonとQMLの間にコミュニケーションドアとして機能する数行のコードしかありませんか?

申し訳ありませんが、私はこれらの質問を装っにおけるダムだ場合。しかし、私は提案や意見を述べたいと思います。

編集:任意のこの組み合わせの制限事項QML-JS-Pythonの概念レベルに予め

+0

なぜそれをJSに保存しないでください.1つの動的言語で十分です。さらに、JSはPythonよりも優れたパフォーマンスを備えています。 Qtの場合、QMLコンポーネントをバインドするためにQMLとJSを拡張するにはC++が必要です。この文脈でのPythonは冗長なツールです。 – dtech

+6

QMLをPythonコンポーネントで拡張することができます。冗長引数によって、アセンブラを除くすべての言語は冗長です。 JSとPythonは明らかに同等ではありません。 QMLの外で深刻なプログラムロジックを持つことは、潜在的に非常に良いことです。 –

+0

@ddriver私が質問したように、いくつかの特定の問題についてOSとの通信を確立するために、いくつかの基本言語が必要です。だから、私は少し親しみやすいようにPythonを好む。 – inblueswithu

答えて

28

おかげで、彼らは非常によく一緒に行きます。私はかなりうまくすべてを組み合わせたpython/qml/js/openglプログラムを書いた。それはQt4.7とPySideで行われました。あなただけのQMLを使用している場合

は、あなたがにさらされる必要がありますQtの量を最小限に抑えることができます(ただし、いつものように、より多くの知識は、あなたがより強力になります)。基本的に、qdeclarativeviewを取得すると、Qtの作業はシグナル/スロットの処理とは別に行われます。これはPySideの喜びです。私は、PythonとQMLを使ってすぐに生産性を上げることができます。必要に応じて、Qt側のことを心配する必要はありません。

経験から、私は自分自身の心の中でPythonとQMLの間の境界を明確にすることをお勧めします。 QMLをGUIロジックに非常に制限しました。これは非常にうまくいきます。実質的にQMLはインタフェースが入力にどのように応答するかを処理し、次に信号をメインプログラムに戻します。 guiとプログラムの残りの部分との間の非常に基本的な、paredされたインターフェースを作成するような、ちょうどハイレベルのロジックを伝えるようなものです(例えば、クリックを返すのではなく、処理をオンにすると、guiはその変更をレンダリングする方法を扱います)。私の場合、これは私のMVCフレームワークにまっすぐ接続しましたが、好きなようにすることができます。

すべてこの中にかかわらず、一つの大きな脂肪の注意点があります。 PySideの開発はむしろ失速しており、現在Qt5とそのすべてのQML改善の良さをサポートしていません。どのようにサポートすべきかについては様々な議論がありましたが、あまり実際のコードはコミットされていません。

私はPyQtはをQt5をサポートして信じているが、デュアルGPLまたは商用(PySideはLGPLであるので、クローズドソースコードで使用することができます)のいずれかとのライセンス。私はPyQtの経験がありません。それ以外のPySideはお互いの交換でほぼ降下しています。

編集:私はMVVMとしてそれを使用して話しているように思え。

編集(制限事項は問いません):QtはPySideとPyQtを通して公開されています。これは、あなたがCのようにPythonでエクステンションを書くことができることを意味します。マウススクロールイベントをキャプチャしたウィジェットを作成して、Flickableからスクロールできるようにしました。これはPythonで作成されたQML要素でしたが、Pythonから読み込む必要もありました。私は、QMLドキュメントの内部からロードできるエクステンションをどのように作成するのかについてはほとんど考えていませんでした。もちろん、メインコードにスタンドアロンのC拡張を書くことも可能です。そのため、常にそのオプションがあります。

+0

明確な返信をありがとうございます。私はJSとPythonをどこで使うべきなのか教えてください。単純な関数でもほとんどJSを排除してPythonを完全に使うべきですか? – inblueswithu

+5

プロとしての経験から、私はPySideは使い勝手が良いとは言いますが、少なくとも期待していたときにポップアップして盲目にすることができる注目すべきいくつかの穴があります。特筆すべきものは、Pythonでシグナルを作成できないことです。通常のシグナル接続ロジックを使用し、名前付きのパラメータを渡すことができます。ハックを使用して、javascript経由でこれらのシグナルに接続する必要があります。ハンドラ関数内のパラメータ。本質的には開発の数ヶ月後、私たちは実際にはさまざまな問題のためにC++を使いたいと考えていました。 – Deadron

+0

@Deadron、So.あなたの経験から、PythonがQMLと本当にシームレスに対話しているわけではないことを理解しました。開発に深刻な影響を与えるかもしれないハードルがあります。あなたはこれで受け入れますか? – inblueswithu

5

2016年4月現在、PySideはQt社が正式にサポートしているnowです。

公式のホームページはhereです。 LGPLのライセンス供与はオプションであり、プロジェクトが最初に作成された主な理由と思われる。

関連する問題