0

私たちは Qt に基づく組み込みソフトウェア UI フレームワークに取り組んでおり、現在、携帯電話とタブレットの 2 種類のデバイスに対応しています。後で、まったく異なる UI を持つ他のフォーム ファクターが登場する可能性があります。UI は現在、携帯電話とタブレットの両方で似ていますが、違いは主に寸法にあります。アプリケーション開発者 (外部アプリではなく内部) に共通の API を公開して、プラットフォームごとに個別の画面を作成する必要がないようにしたいと考えています。

画面を開発するには、アプリ開発者は Screen クラスから継承するか、PrefScreen クラスなどのより特殊な画面から継承する必要があります。各コンポーネントの統一されたインターフェイスをアプリ開発者に公開したいと考えていましたが、フレームワーク内のプラットフォーム固有の実装を使用していました。次のクラスがあります。

ScreenBase (すべてのプラットフォームに共通のインターフェースを公開します) ScreenPhone : ScreenBase ScreenTablet : ScreenBase

PrefScreenBase (すべてのプラットフォームに共通のインターフェイスを公開します)
PrefScreenPhone: PrefScreenBase PrefScreenTablet: PrefScreenBase

それを達成するために、次の型定義があります。

#ifdef PHONE
typedef ScreenPhone Screen;
typedef PrefScreenPhone PrefScreen;
#elif TABLET
typedef ScreenTablet Screen;
typedef PrefScreenTablet PrefScreen;
#endif

継承構造は次のとおりです
。 ScreenBase |_ScreenPhone
|_ScreenTablet

PrefScreenBase : Screen (ビルド対象のプラットフォームに基づいて ScreenPhone または ScreenTablet に解決されます)
|_PrefScreenPhone
|_PrefScreenTablet

Screen は、スマートフォンのビルドでは ScreenPhone に解決され、タブレットのビルドでは ScreenTablet に解決されます。PrefScreen は、スマートフォンのビルドでは PrefScreenPhone に解決され、タブレットのビルドでは PrefScreenTablet に解決されます。

電話では、階層は ScreenBase->ScreenPhone->PrefScreenBase->PrefScreenPhone になります。タブレットでは、階層は ScreenBase->ScreenTablet->PrefScreenBase->PrefScreenTablet になります。

基本的に、プラットフォーム固有のクラスは共通の *Base クラスから派生し、*Base クラスはビルド対象のプラットフォームに基づいた適切なクラスから派生します。Bridge パターン (http://en.wikipedia.org/wiki/Bridge_pattern) を使用して問題を解決することを検討しましたが、期限がそれを許可していないようです。また、私たちのフレームワークは Qt フレームワークに基づいているため、実装をインターフェイスから分離するのは複雑です。

上記のアプローチは、どのフレームワークでも使用されていますか? 上記のアプローチに大きな問題がありますか? もしそうなら、代替手段は何ですか?私たちの主な目標は、アプリケーション開発者に対してプラットフォームの違いを抽象化し、最大限のコード再利用を保証することです。

4

1 に答える 1

0

QDesktopWidget を使用できると思います。

http://harmattan-dev.nokia.com/docs/library/html/qt4/qdesktopwidget.html

nokia docs が言うように:

QDesktopWidget クラスは、マルチヘッド システムの画面情報へのアクセスを提供します。

複数のグラフィックス カードとモニターを備えたシステムは、複数のデスクトップまたは大規模な仮想デスクトップとして利用可能な物理画面スペースを管理できます。

このクラスは、ユーザーのデスクトップに関する情報を提供します。たとえば、合計サイズ、画面の数、各画面のジオメトリ、およびそれらが個別のデスクトップまたは単一の仮想デスクトップとして構成されているかどうかです。

Qt が提供するウィジェットは、このクラスを使用して、ツールチップ、メニュー、およびダイアログ ボックスを、親ウィジェットまたはアプリケーション ウィジェットの正しい画面に配置します。アプリケーションは、このクラスを使用して >ウィンドウの位置を保存したり、子ウィジェットやダイアログを 1 つの特定の画面に配置したりするために使用できる >情報を取得できます。

特に: QDesktopWidget::screenGeometry() を使用すると、画面解像度をピクセル単位で取得できます。

于 2012-10-12T15:48:07.180 に答える