2013-07-25 28 views
23

Qt 5.0には新しいQWindowクラスが用意されています。このクラスのドキュメントは非常に包括的ですが、QWindowQWidgetクラスとどのように違うのか、またどのクラスの方が好きなのか分かりません。両方とも、あらゆる種類のものを画面に表示する便利な方法を提供しています。どちらも描画にQPainterを使用でき、両方ともOpenGLとやりとりする方法があります。QWindowとQWidgetの違い

アプリケーションは通常、そのUIのためにQWidgetのかQQuickViewを使用し、直接QWindowません。API description

は、それがいることを言います。

これは、ウィンドウの利点ではないようです。さらに、それは状態:

潜在的に多くのメモリを使用することができます。通常の測定は、幅と高さが色の深さを掛けたものです。また、ウィンドウには、ダブルバッファリングとトリプルバッファリングをサポートする複数のバッファ、および深度バッファとステンシルバッファが含まれている場合があります。

QWindowを使用していると思われません。どのような場合に使用しますか?

答えて

51

QWindowは、gui/widgetsの分割によりQt 5.0に導入されました。 QWidgetは現在、独自のライブラリ(QtWidgets)に存在します。非ウィジェットベースのアプリケーションのための「トップレベルウィンドウ」の抽象化を提供する必要があったため、QWindowが作成され、QtGuiに存在します。

以外のウィジェットベースのアプリケーションのクラス全体があります.QtQuick2を使用しているものすべてです。彼らはQtWidgetライブラリをまったく使用しません。実際には、QWindowsを明示的に使用しています(QQuickViewQWindowを継承しています)。

トップレベルのQWindowsは、Qtカーネルによって作成されます。このQWindowオブジェクトのプロパティとフラグは、対応する最上位のQWidgetsと同期しています。こうすることで、QWindowについて全く知らなくても、いつものようにウィジェットを扱うことができます。などなど

唯一の理由は(今のところ)私は明示的にQWindow sが非常に具体的なユースケースのためにある使用してきた期待通りに既存のアプリケーションは引き続き実行されます:は、純粋なOpenGLのコンテンツを描画します。これは非常に簡単です(ウィンドウ上にOpenGLサーフェスタイプを設定することによって)、追加の依存関係(QtWidgets、QtOpenGLなど)を持たないようにします(ライブラリサイズに関してコストがかかります)。 これは、Linux、Windows、Mac、QNX、 "組み込みLinux"、そしておそらくAndroidとiOSで動作するコードの10行のようなOpenGL描画面を作成することを可能にします。この観点からは、完全なSDLの代替として機能します。 :)

+1

ここで私はこれに関するいくつかの例を見つけることができますか? – nkint

+1

これは素晴らしい答えです。それはすべての答えの母親のようなものです。名誉! –

関連する問題