Sysbian UIQ 初学者学习引导(一)

UIQ程序是面向对象的,一个程序应至少有四个类:Application Class、Document Class、AppUI Class 和View Class。其继承关系如下图:
 
上图中绿颜色的类是UIQ应用程序开发者自己编写的类。QikAppUi, CQikDocument 和 CQikApplication是由Qikon提供。
各部分功能模块相互关系如下:
 
程序入口 à ApplicationClass à DocumentClass à AppUiClass à ViewClass
1.2.2          UIQ应用程序入口
/**
E32Main()包含程序的起动代码,EXE执行入口。
E32Main() contains the program's start up code, the entry point for an EXE.
*/
GLDEF_C TInt E32Main()
            {
            return EikStart::RunApplication(NewApplication);
            }
CApaApplication* NewApplication()
            {
            return new CHelloWorldApplication;
            }
当应用程序比较大、所要处理的数据比较多时,就会用到Application Model这个类。
Application Model主要是容纳应用程序中的数据。这种Model是用来分离UI Code和应用程序。这样的目的是,当更换UI时,就不需要改变处理数据的代码。
       Application Model声明一般如下:
class CListBoxModel : public CBase
{
public:
     static CListBoxModel* NewL();
     ~CListBoxModel();
public:
/* 成员声明 */
private:
/* 成员声明 */
};
Application Model 与其它类有如下几个主要关联:
Ø        应用程序中DocumentClass类构造拥有这个Model;
Ø        AppUi类中包含有一个指向该Model的指针或Model的引用;
Ø        AppUI接受由ViewClass传递过来的用户命令,并调用适当的Model中的函数来处理用户命令。
Ø        Views(in the GUI framework sense)也包含Model的指针或引用。Views调用Model中合适的成员函数来处理用户命令。Views也能决定传递给AppUI的用户命令。
 
UIQ应用程序中的Application都是继承于CQikApplication这个类,并且要重载CQikApplication类中的两个纯虚函数:
  • CQikApplication::AppDllUid()
  • CQikApplication::CreateDocumentL()
AppDllUid()函数由应用程序构架来调用,验证个应用程序的身份。这个函数执行后返回应用程序的UIQ。
CreateDocumentL()也是由应用程序来调用的,用来创建和程序相关的文档对象。执行这个函数后,应返回指向本应用程序中Document类的指针,如下:
class CExampleApplication : public CQikApplication
 {
     private:
 
     //CreateDocumentL calls for NewL in CExampleDocument
     CApaDocument* CreateDocumentL();
 
     //Returns the Uid of the application.
   TUid AppDllUid() const;       
};
 
// 1. Gets the application UID
TUid CExampleApplication::AppDllUid() const
{
       return KUidApp; // The same UID as is declared in the mmp file.
}
 
// 2. Gets a new document object.
CApaDocument* CExampleApplication::CreateDocumentL()
{
      return new (ELeave) CExampleDocument(*this);
}
class CExampleDocument : public CQikDocument
{
public:
    // Constructor.
    CExampleDocument(CEikApplication& aApp);
private: // From CEikDocument.
    CEikAppUi* CreateAppUiL();
};
// 1. Document constructor.
CExampleDocument::CExampleDocument(CEikApplication& aApp) : CQikDocument(aApp)
 {
 }
 
// 2. Create appUI.
CEikAppUi* CExampleDocument::CreateAppUiL()
 {
    return new (ELeave) CExampleAppUi;
    }
class CExampleAppUi : public CQikAppUi
{
public:
    // Second-phase constructor.
    void ConstructL();
 
private:
    CExampleAppView* iAppView;
 };
 
一般要在 AppUI 类中的 ConstructL() 函数中创建 View 对象,如下:
 
void CMyDirectoryAppUi::ConstructL()
{
//Create the ListView and attach it.
//This will become the default view since we are adding it first
CExampleAppView* iListView = CExampleApptView::NewLC(*this, KNullViewId, Model);
AddViewL(*iListView);
CleanupStack::Pop(iListView);
}
 
class CExampleView : public CQikViewBase
{
private:
    void ConstructL();
protected:
     TVwsViewId ViewId()const;
 void ViewContructL();
};
class CListBoxModel : public CBase
{
public:
     static CListBoxModel* NewL();
     ~CListBoxModel();
public:
/* 成员声明 */
private:
/* 成员声明 */
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值