为多个平台设计UI框架

时间:2012-10-12 12:38:55

标签: c++ qt design-patterns inheritance

我们正在开发基于Qt的嵌入式软件UI框架,该框架目前支持2种类型的设备 - 手机和平板电脑。稍后可能会有其他形式因素具有完全不同的UI。对于手机和平板电脑,UI目前是相似的,差异主要在于尺寸。我们希望向应用程序开发人员公开一个通用的API(内部,没有外部应用程序),这样他们就不必为每个平台编写单独的屏幕。

要开发屏幕,应用程序开发人员必须从Screen类继承,或从更专业的屏幕(如PrefScreen类)继承。我们希望为应用程序开发人员公开每个组件的统一接口,但是在框架中使用特定于平台的实现。我们有以下课程:

ScreenBase(暴露所有平台通用的接口) ScreenPhone:ScreenBase ScreenTablet:ScreenBase

PrefScreenBase(暴露所有平台通用的接口)
PrefScreenPhone:PrefScreenBase PrefScreenTablet:PrefScreenBase

为了实现它,我们有以下类型defs:

#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

屏幕将解析为手机版本上的ScreenPhone,并在平板电脑的构建上解析为ScreenTablet。 PrefScreen将解析手机版本上的PrefScreenPhone,并在平板电脑的构建中解析为PrefScreenTablet。

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

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

上述方法是否在任何框架中使用?你看到上述方法存在重大问题吗?如果是这样,那会有什么选择呢? 我们的主要目标是将平台差异抽象给应用程序开发人员,并确保最大程度地重用代码。

1 个答案:

答案 0 :(得分:0)

我猜你可以使用QDesktopWidget:

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

诺基亚医生说:

  

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

     

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

     

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

     

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

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