Qtクイックvs.Qtウィジェット[クローズ]


81

私はQtを初めて使用しますが、QtクイックプロジェクトとQtウィジェットプロジェクトの違いをよく理解していません。

ユーザーが回転およびせん断したり、パンしたり、ズームインおよびズームアウトしたりできる六角形の格子を描画するプログラムを作成したいと考えています。最終的にはMIDIコントローラーになります。これにはどのタイプのプロジェクトが適していますか、またその理由は何ですか?

これがデスクトップとモバイルの両方のプラットフォームで機能することを望んでいます。


3
Qt Quick Webサイトで少し時間をかけて、例を見てください。それが必要な場合は、それを使用してください。そうでない場合は、通常のQtウィジェットプロジェクトを取得しましたが、モバイルプラットフォームが問題になる可能性があります。
マット

マットのコメントのために更新されたリンクdoc.qt.io/qt-5/qtquick-index.html
Ayxan Haqverdili

回答:


39

注: QtウィジェットはQMLウィジェットに置き換えられました。この回答は、尋ねられた質問に答えます。これは、現在、厳密には古いQtウィジェットに関する歴史的な質問です。

Qt Quickは、スマートフォンアプリで一般的な多くのクールなアニメーショントランジションをサポートする宣言型のスマートフォンスタイルのユーザーインターフェイスです。クイックは、プロトタイプを迅速に開発するための良い選択でもあります。Qt Widgetは、従来のデスクトップ指向のUIモデルです。

現在(Qt5より前)、デスクトップシステム機能のQt Quickサポートは不足しています(ただし改善されています)。クイックでは、メニュー、ツールバー、ダイアログ、およびその他の標準的なデスクトップ動作はそれほどサポートされていませんが、ウィジェットはこれらの要素を非常によくサポートしています。

アプリをデスクトップおよびタブレットプラットフォームでネイティブに見せたいですか、それとも独自のカスタムUIウィジェットを中心にシンプルなアプリケーションを構築していますか?Matが言ったように、Qt Quickが必要な機能をサポートしている場合、それがおそらく最速のアプローチになります。フル機能のデスクトップバージョンを構築したい場合は、Qtウィジェットがおそらく最善の策です。


1
両方欲しいです。:)今のところQtウィジェットを使用しています。
アンソニー

10
Qt 5.0以降、6.0に近づいており、QtウィジェットはQMLウィジェットに取って代わられたため、この回答は削除、編集、または反対票を投じる必要があります。
アリエルM.

15
QMLはQtウィジェットの代わりにはなりません。少なくとも、Qwt、QCustomPlotなどのプロジェクトに取って代わるまでは、2019年になりますが、そうではないようです。それが単なる別の実装方法になるまで、それ以上でもそれ以下でもありません。
アンドリー

1
@Ariel M. Qt Widgetsは置き換えられず、少なくともすべてが書き直されるまでは置き換えられませんが、そうではありません。
アンドリー

1
QwtとQCustomPlotはサードパーティのプロジェクトであり、QtWidgetsの一部ではないため、移植されているかどうかは関係ありません。さらに、Anthonyは初心者であり、高度にカスタマイズされたUIが必要なMIDIコントローラーの作成について質問していました(Arena、Lemur PS Elements、および同様のソフトウェアを参照)。QMLは行く方法です。
アリエル

37

qtアプリケーションを専門的に開発する人として、私はいつでもウィジェットよりもqmlを選択します。

ウィジェットは非常に基本的なものに適していますが、もう少し凝ったものを作成する必要があると、ウィジェットはすぐに不足します。

Qmlは単純にはるかに柔軟性があり、ウィジェットの限られたレイアウトシステムを使用する代わりに、好きな場所にアイテムを固定できます。ウィジェットがこれらでいっぱいである間、プラットフォーム依存性の欠陥はほとんどありません。また、プロパティバインディングシステムにより、UIをモデルと同期させるのが非常に簡単になります。


3
ありがとう!回答に記載されている専門的な経歴に基づいて、QML / QtQuickから始めることにしました。QtCreatorの* .ui.qmlを簡単に使用して、PyQtで直接使用できることを理解してください。Python + QtQuickの初期設定を解決しました!
swdev 2016年

2
複雑なデスクトッププログラムにQtQuickを使用することは、パフォーマンスにおいて悪い考えです...
Yousha Aleayoub 2018

レイアウトAPIの経験が足りないのではないでしょうか。ウィジェットではできない、QMLでできることの例はありますか?私は5年以上世界中で1万人のユーザーがいるアプリでQtを使用していますが、ウィジェットは無制限の電力しか提供しないため、ウィジェットを使用しています。QMLは、プロトタイプや小規模なプロジェクトに適しています。はい、パフォーマンスが重要です。また、QMLはOpenGL駆動であるため、ユーザーベースが古いハードウェアでいっぱいの場合、これはショーストッパーです。
ダランバー

37

:この回答では、「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デザイン

どちらにもuiQtDesignerで動作するファイルがあり、レイアウトの設定とインターフェイスの作成のための高レベルのビューを提供します。(Qt Quickでは拡張子は.ui.qml。Qtウィジェットでは拡張子.uiです。).uiファイルは必須でも必須でもありません。QML/ JSまたはC ++ / Pythonを使用してプログラムでデザインとレイアウトを行うことができます。

学習

プログラミングにまったく慣れていない場合は、最初にQtQuickを確認することをお勧めします。個人的には、Qt Quickの学習曲線は緩やかで、無数のプロジェクトを遂行するための作業が簡単だと思います。それは、「Qtのと呼ばれていますクイック理由」。(ただし、Qtウィジェットを見下ろさないでください。QtQuickよりも優れたモジュールがいくつかあります。)

あなたが前にC ++やPythonでプログラミングしてきた場合は、私は彼らに慣れるために、まずQtのウィジェットを見てみ示唆している信号とスロットメカニズム(例えば、あなたがかもしれないの関心こととモジュールsqlnetworkgui()プログラミングの設計と並ん例えばデータを表示するためのモデル/ビュープログラミング)。

特にC ++の場合、イベント処理を行うほとんどの非Qtライブラリはwhileループを使用しますが、これはQtには当てはまりません。それらは信号とスロットを使用します

結局、主にQtウィジェットを使用している場合でも、Qt Quickを検討することをお勧めします。これは、高レベルの宣言型言語を使用して操作でき、設定をより迅速に行えるためです。(特にモバイル開発の場合。)

Qtは、両方のために豊富に例を提供するQtのクイックQtのウィジェットと一緒に、プロジェクトのフォーラム。長期的には助けを得るのを心配する必要はありません。(StackOverflowを忘れないでください!)

Qtクイック+ Qtウィジェット

これまで、それらを別々のエンティティのように扱ってきました。ただし、QMLをC ++統合することは可能です。これにより、Qtウィジェット、C ++、およびその他のモジュールを利用できます。たとえば、QtQuickは提供しますが、提供しTreeViewませんTreeModel。これは、C ++からQMLに登録できます。多くの場合、関心の分離があります。Qtは、プログラムをUIに、ロジックをQMLとC ++にそれぞれ分離することを推奨しています。

これは、たとえば、集中的なSQLクエリ、アルゴリズム、または非同期http / xmlリクエストのバックエンドが必要な場合にも役立ちます。かっこいいじゃないですか。QML / JSフロントエンドとC ++バックエンド。フルスタックQt'er。:-)

(私が試したことがないのは、Pythonバックエンドを持っていることです。私はまだPyQtに触れていません...)


7

Qt QuickのデフォルトはQMLで、インラインECMAscriptが有効になっているJSON宣言型方言です。Qtウィジェットを使用すると、デザイナーはスタイルシートを作成でき、開発者はネイティブC ++コーディングを行います。

QMLは実行時に処理されます。フレームワーク内では、すべてを一緒に実行できます。違いは、ソフトウェアアーキテクトの意思決定に柔軟性を追加するだけです。


5

まず、ウィジェットから始めるべきだと思います。ウィジェットUIは、以前の経験がクイックで簡単に習得できるフロントエンドのことに関するものである場合、qtをさらに簡単に習得するのに役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.