35

Qt 5.0 は新しいQWindowクラスを提供します。このクラスのドキュメントは非常に包括的ですが、 がクラスとどのようにQWindow異なるのかQWidget、どの場合に前者を好むのか、私にはわかりません。どちらも、あらゆる種類のものを画面に視覚化する便利な方法を提供し、QPainter描画に使用でき、OpenGL と対話する方法を備えています。

APIの説明では、次のように述べています。

アプリケーションは通常、QWindow を直接ではなく、その UI に QWidget または QQuickView を使用します。

したがって、それはウィンドウにとって利点ではないようです。さらに、次のように述べています。

Windows は大量のメモリを使用する可能性があります。通常の測定値は、幅×高さ×色深度です。ウィンドウには、ダブル バッファリングとトリプル バッファリングをサポートする複数のバッファ、および深度バッファとステンシル バッファも含まれる場合があります。

の使用に賛成していないようですQWindow。では、どのような場合に使用するのでしょうか。

4

1 に答える 1

75

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

非ウィジェットベースのアプリケーションのクラス全体があります: QtQuick2 を使用するすべてのアプリケーションです。彼らは QtWidget ライブラリをまったく使用しません。実際のところ、それらを使用するときは、常に何らかの方法で QWindows を明示的に使用しています (QQuickViewから継承QWindow)。

ウィジェットを使用している場合でも、Qt カーネルによってトップレベルの QWindows が作成されます。また、Qt カーネルは、そのような QWindow オブジェクトのプロパティとフラグを、対応するトップレベルの QWidget と同期させます。このようにして、QWindow についてまったく知らなくても、いつものようにウィジェットを扱うことができます。既存のアプリケーションは引き続き期待どおりに動作します。

(これまでのところ) 私がQWindows を明示的に使用してきた唯一の理由は、非常に特殊な使用例のためです:純粋な OpenGL content を描画するためです。これは (ウィンドウに OpenGL サーフェス タイプを設定することにより) 非常に簡単に実現でき、追加の依存関係 (QtWidgets、QtOpenGL など、ライブラリ サイズの点でコストがかかる) を持ち込む必要がありません。Linux、Windows、Mac、QNX、「組み込み Linux」、そしておそらく Android と iOS でも動作する10 行程度のコードで OpenGL 描画サーフェスを作成できます。 この観点から、SDL の完全な代替品として機能します。:)

于 2013-07-25T19:44:46.460 に答える