BB10 Cascades Beta2开发环境提供了多个样例,为了更好地理解不同样例,我们可以分析一下最简单的样例,从而了解BB10 Cascades应用的基本框架。
BB10 Cascades Beta2中通过“File -> New -> BlackBerry Cascades c++ Project”创建,在选择模板时选择“Standard empty project”就可以了,具体细节参见之前的博文。
该样例运行起来是一个白色屏幕,屏幕上有“Hello World”字样。
样例的入口在src目录的main.cpp文件中,代码很简单,如下:
#include"app.hpp"
#include<bb/cascades/Application>
#include<QLocale>
#include<QTranslator>
using ::bb::cascades::Application;
int main(int argc, char **argv)
{
//-- this is where the server is started etc
Application app(argc, argv);
//-- localization support
QTranslator translator;
QString locale_string = QLocale().name();
QString filename = QString( "FirstHello_%1" ).arg( locale_string );
if (translator.load(filename, "app/native/qm")) {
app.installTranslator( &translator );
}
App mainApp;
//-- we complete the transaction started in the app constructor and start the client event loop here
returnApplication::exec();
//-- when loop is exited the Application deletes the scene which deletes all its children (per qt rules for children)
}
在main.cpp中首先包含一些需要使用的头文件,<bb/cascades/Application>,<QLocale>
<QTranslator>这三个是系统头文件,包括了Cascades中主要的程序框架Application和一些本地化需要使用的头文件。另外导入了“App.hpp”,这个文件也在src目录中,是本样例真正的入口。
然后声明在本文件中需要使用类Application,using语句如下:
using ::bb::cascades::Application;
接着就是程序入口了,和一般的main方法没有太大不同。Main方法中主要就是下面三行语句,其它的可以暂时不管它。
下面三行语句用于建立运行环境,建立应用实例,然后进入事件循环:
Application app(argc, argv);
App mainApp;
returnApplication::exec();
因为大部分简单的Cascades程序都是通过这些方法启动,所以不需要太关注每行语句对应的底层细节,那些底层细节可以等以后再分析。目前可以将以上启动应用的语句当作例行的工作。
进一步需要关注的就是src目录下的app.cpp 和 app.hpp两个文件了。样例的应用类就是通过这两个文件定义的。
app.hpp是App类的头文件,打开看会发现该文件很简单,就是定义一个App类,继承自QObject,另外需要留意的是类定义中插入了Q_OBJECT宏,插入这个宏的目的是将这个类定义成一个Qt类,对Qt有一些了解的同学一定对这个比较熟悉。
然后再看看app.cpp文件,文件中定义了App类的构造函数,函数实现如下:
App::App()
{
QmlDocument *qml = QmlDocument::create("main.qml");
AbstractPane *root = qml->createRootNode<AbstractPane>();
Application::setScene(root);
}
App构造函数中的第一句用于载入名为main.qml的文件,文件main.qml定义了主屏幕的细节,包括我们看见的“Hello World”标签,有关main.qml一会我们再详细讨论。
载入main.qml后由指针qml保存,接着通过createRootNode<AbstractPane>方法获得mail.qml中定义的主面板。注意createRootNode<AbstractPane>是模板函数createRootNode的特例化,通过AbstractPane进行,而Cascades中的面板类的组件都是AbstractPane的子类。
获得main.qml中的主面板后通过Application的静态方法setScene()将主面板显示出来。
具体main.qml中定义了那些元素呢,我们可以打开assets目录中的main.qml文件来看看,内容很简单,全部显示如下:
import bb.cascades 1.0
//-- create one page with a label and text
Page {
content: Label {
text: qsTr("Hello world")
}
}
第一句是导入bb.cascades 1.0包,这样才可以使用Cascades中的组件,然后定义了一个Page元素,Page元素的content属性,也就是内容属性指定为一个Label组件,该Label组件的text属性指定为一个“Hello world”字符串。
以上就是BB10 Cascades Hello World样例的全部内容了,是不是很简单呢?后面有机会我们再看看如何在BB10 Cascades 开发环境中使用Page, Label等组件,同样是非常简单呢!!