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

来源:互联网 发布:java远程执行perl脚本 编辑:程序博客网 时间:2024/06/06 07:17
1                    UIQ程序结构
1.1             总述
UIQ程序是面向对象的,一个程序应至少有四个类:Application Class、Document Class、AppUI Class 和View Class。其继承关系如下图:
 
上图中绿颜色的类是UIQ应用程序开发者自己编写的类。QikAppUi, CQikDocument 和 CQikApplication是由Qikon提供。
各部分功能模块相互关系如下:
1.2             主要类调用流程
1.2.1          主要类执行流程
 
程序入口à 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;
            }
1.2.3          关于Application Model
当应用程序比较大、所要处理的数据比较多时,就会用到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的用户命令。
1.3             构造四个主要类
1.3.1          构造Application Class
 
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);
}
1.3.2          构造Document Class
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;
  }
1.3.3          构造AppUi Class
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);
}
1.3.4          构造View Class
 
class CExampleView : public CQikViewBase
{
private:
    void ConstructL();
protected:
     TVwsViewId ViewId()const;
 void ViewContructL();
};
1.3.5          构造ModelClass
class CListBoxModel : public CBase
{
public:
     static CListBoxModel* NewL();
     ~CListBoxModel();
public:
/*成员声明*/
private:
/*成员声明*/
};
原创粉丝点击