私はQtを初めて使用しますが、QtクイックプロジェクトとQtウィジェットプロジェクトの違いをよく理解していません。
ユーザーが回転およびせん断したり、パンしたり、ズームインおよびズームアウトしたりできる六角形の格子を描画するプログラムを作成したいと考えています。最終的にはMIDIコントローラーになります。これにはどのタイプのプロジェクトが適していますか、またその理由は何ですか?
これがデスクトップとモバイルの両方のプラットフォームで機能することを望んでいます。
私はQtを初めて使用しますが、QtクイックプロジェクトとQtウィジェットプロジェクトの違いをよく理解していません。
ユーザーが回転およびせん断したり、パンしたり、ズームインおよびズームアウトしたりできる六角形の格子を描画するプログラムを作成したいと考えています。最終的にはMIDIコントローラーになります。これにはどのタイプのプロジェクトが適していますか、またその理由は何ですか?
これがデスクトップとモバイルの両方のプラットフォームで機能することを望んでいます。
回答:
注: QtウィジェットはQMLウィジェットに置き換えられました。この回答は、尋ねられた質問に答えます。これは、現在、厳密には古いQtウィジェットに関する歴史的な質問です。
Qt Quickは、スマートフォンアプリで一般的な多くのクールなアニメーショントランジションをサポートする宣言型のスマートフォンスタイルのユーザーインターフェイスです。クイックは、プロトタイプを迅速に開発するための良い選択でもあります。Qt Widgetは、従来のデスクトップ指向のUIモデルです。
現在(Qt5より前)、デスクトップシステム機能のQt Quickサポートは不足しています(ただし改善されています)。クイックでは、メニュー、ツールバー、ダイアログ、およびその他の標準的なデスクトップ動作はそれほどサポートされていませんが、ウィジェットはこれらの要素を非常によくサポートしています。
アプリをデスクトップおよびタブレットプラットフォームでネイティブに見せたいですか、それとも独自のカスタムUIウィジェットを中心にシンプルなアプリケーションを構築していますか?Matが言ったように、Qt Quickが必要な機能をサポートしている場合、それがおそらく最速のアプローチになります。フル機能のデスクトップバージョンを構築したい場合は、Qtウィジェットがおそらく最善の策です。
qtアプリケーションを専門的に開発する人として、私はいつでもウィジェットよりもqmlを選択します。
ウィジェットは非常に基本的なものに適していますが、もう少し凝ったものを作成する必要があると、ウィジェットはすぐに不足します。
Qmlは単純にはるかに柔軟性があり、ウィジェットの限られたレイアウトシステムを使用する代わりに、好きな場所にアイテムを固定できます。ウィジェットがこれらでいっぱいである間、プラットフォーム依存性の欠陥はほとんどありません。また、プロパティバインディングシステムにより、UIをモデルと同期させるのが非常に簡単になります。
注:この回答では、「Qtウィジェット」はQtウィジェットアプリケーションを指し、新しいQtアプリケーションを作成するときに選択できます。
質問が最初に投稿されてから7年ですが、それ以降の開発を無力化するという私の「目標」は2セントです。
QtQuickプロジェクトはQMLとJavaScriptを使用します。
QtウィジェットプロジェクトはC ++コードを使用します。(QtのPythonバインディングであるPyQtとPySideはPythonを使用します。)
そのため、QtウィジェットはQtQuickと比較して低レベルと見なすことができます。ただし、これは、長期的には、Qt Widgetsプロジェクトの実行速度が速くなり、パフォーマンスが向上することを意味します。ただし、QtウィジェットはネイティブAPI(QtCoreモジュール、Qtスタイルシートなど)に公開されているため、低レベルであることは良いことです。とはいえ、デスクトップ開発によく使用されます。
Qt Quickは、モバイル開発に対応しています(ただし、デスクトップ開発でも使用できます)。すぐに使用できるポップアップ、アニメーション、タブとレイアウト、フリック可能、引き出し、および通常のコントロールがあります。モバイル開発ではすべてユビキタスです。
どちらにもui
QtDesignerで動作するファイルがあり、レイアウトの設定とインターフェイスの作成のための高レベルのビューを提供します。(Qt Quickでは拡張子は.ui.qml
。Qtウィジェットでは拡張子.ui
です。).ui
ファイルは必須でも必須でもありません。QML/ JSまたはC ++ / Pythonを使用してプログラムでデザインとレイアウトを行うことができます。
プログラミングにまったく慣れていない場合は、最初にQtQuickを確認することをお勧めします。個人的には、Qt Quickの学習曲線は緩やかで、無数のプロジェクトを遂行するための作業が簡単だと思います。それは、「Qtのと呼ばれていますクイック理由」。(ただし、Qtウィジェットを見下ろさないでください。QtQuickよりも優れたモジュールがいくつかあります。)
あなたが前にC ++やPythonでプログラミングしてきた場合は、私は彼らに慣れるために、まずQtのウィジェットを見てみ示唆している信号とスロットメカニズム(例えば、あなたがかもしれないの関心こととモジュールsql
、network
、gui
()プログラミングの設計と並ん例えばデータを表示するためのモデル/ビュープログラミング)。
特にC ++の場合、イベント処理を行うほとんどの非Qtライブラリはwhile
ループを使用しますが、これはQtには当てはまりません。それらは信号とスロットを使用します。
結局、主にQtウィジェットを使用している場合でも、Qt Quickを検討することをお勧めします。これは、高レベルの宣言型言語を使用して操作でき、設定をより迅速に行えるためです。(特にモバイル開発の場合。)
Qtは、両方のために豊富に例を提供するQtのクイックとQtのウィジェットと一緒に、プロジェクトのフォーラム。長期的には助けを得るのを心配する必要はありません。(StackOverflowを忘れないでください!)
これまで、それらを別々のエンティティのように扱ってきました。ただし、QMLをC ++に統合することは可能です。これにより、Qtウィジェット、C ++、およびその他のモジュールを利用できます。たとえば、QtQuickは提供しますが、提供しTreeView
ませんTreeModel
。これは、C ++からQMLに登録できます。多くの場合、関心の分離があります。Qtは、プログラムをUIに、ロジックをQMLとC ++にそれぞれ分離することを推奨しています。
これは、たとえば、集中的なSQLクエリ、アルゴリズム、または非同期http / xmlリクエストのバックエンドが必要な場合にも役立ちます。かっこいいじゃないですか。QML / JSフロントエンドとC ++バックエンド。フルスタックQt'er。:-)
(私が試したことがないのは、Pythonバックエンドを持っていることです。私はまだPyQtに触れていません...)
Qt QuickのデフォルトはQMLで、インラインECMAscriptが有効になっているJSON宣言型方言です。Qtウィジェットを使用すると、デザイナーはスタイルシートを作成でき、開発者はネイティブC ++コーディングを行います。
QMLは実行時に処理されます。フレームワーク内では、すべてを一緒に実行できます。違いは、ソフトウェアアーキテクトの意思決定に柔軟性を追加するだけです。