0

我们正在开发基于 Qt 的嵌入式软件 UI 框架,该框架目前支持两种类型的设备——手机和平板电脑。稍后可能会有其他外形尺寸具有完全不同的 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 : 屏幕(根据为其构建的平台解析为 ScreenPhone 或 ScreenTablet)
|_PrefScreenPhone
|_PrefScreenTablet

Screen 将在手机版本上解析为 ScreenPhone,并在平板电脑版本上解析为 ScreenTablet。PrefScreen 将在手机版本上解析为 PrefScreenPhone,并在平板电脑版本上解析为 PrefScreenTablet。

在手机上,层次结构为 ScreenBase->ScreenPhone->PrefScreenBase->PrefScreenPhone 在平板电脑上,层次结构为 ScreenBase->ScreenTablet->PrefScreenBase->PrefScreenTablet

本质上,平台特定类派生自通用 *Base 类,而 *Base 类派生自基于其构建平台的适当类。我们考虑使用桥接模式 (http://en.wikipedia.org/wiki/Bridge_pattern) 来解决问题,但我们的截止日期似乎不允许这样做。此外,由于我们的框架基于 Qt 框架,因此将实现与接口分离会很复杂。

上述方法是否在任何框架中使用?您认为上述方法存在重大问题吗?如果是这样,有什么替代方案?我们的主要目标是为应用程序开发人员抽象出平台差异,并确保最大程度地重用代码。

4

1 回答 1

0

我想你可以使用 QDesktopWidget:

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

正如诺基亚文档所说:

QDesktopWidget 类提供对多头系统的屏幕信息的访问。

具有多个图形卡和显示器的系统可以将可用的物理屏幕空间作为多个桌面或大型虚拟桌面进行管理。

此类提供有关用户桌面的信息,例如其总大小、> 屏幕数量、每个屏幕的几何形状,以及它们是配置为单独的 >desktops 还是单个虚拟桌面。

Qt 提供的小部件使用此类将工具提示、菜单和对话框放置在其父或应用程序小部件的正确屏幕上。应用程序可以使用此类 > 获取可用于保存窗口位置的信息,或将子小部件 > 和对话框放置在一个特定屏幕上。

特别是: QDesktopWidget::screenGeometry() 您可以获得以像素为单位的屏幕分辨率。

于 2012-10-12T15:48:07.180 回答