Sailfish应用开发入门(一)ApplicationWindow与Cover

一、Sailfish Silica 基于QT Quick提供了Sailfish的UI界面。每个Sailfish 引用必须定义为一个Qt C++应用项目,在项目里使用QDeclarativeView加载应用UI。

      

#include <QApplication>
#include <QDeclarativeView>

#include "sailfishapplication.h"

Q_DECL_EXPORT int main(int argc, char *argv[])
{
    QScopedPointer<QApplication> app(Sailfish::createApplication(argc, argv));
    QScopedPointer<QDeclarativeView> view(Sailfish::createView("main.qml"));
    
    Sailfish::showView(view.data());
    view->showFullScreen();
    return app->exec();
}


 

二、Sailfish是多任务系统,所有的应用都有两种状态:Active和Background
        Active:占用所有可用屏幕
        Backgroud:准备显示到主屏幕(home screen)

       我们可以使用ApplicationWindow.applicationActive属性获取应用状态,当应用在前台运行则状态为true,如果在后台运行则状态为false.
       注:在后台运行的应用必须保证最小资源占用。例如所有的资源必须暂停,并且释放无用的资源。

      

import QtQuick 1.1
import Sailfish.Silica 1.0
import "pages"

ApplicationWindow
{
    initialPage: Page {
        Label {
            text: "Hello Micky!"
            anchors.centerIn: parent
            RotationAnimation on rotation {
                from: 0
                to: 360
                duration: 2000
                loops: Animation.Infinite
                running: applicationActive
            }
        }
    }
}

        Sailfish OS中所有运行中的的应用均可以在主界面以“Cover”的形式显示。当一个应用被移到后台运行后Cover将自动被创建并且显示。通过ApplicationWindow.cover属性获取应用cover。这个属性应该被设置在组件上让cover显示在homescreen,通常还需要显示应用当前的状态。应用可以基于状态的改变更新cover,无论如何不应该在cover上显示动画。当应用转到前台运行时,cover会被自动隐藏。
        一个应用应该总是具备cover。Sailfish OS中所有运行中的的应用均可以在主界面以“Cover”的形式显示。当一个应用被移到后台运行后Cover将自动被创建并且显示。通过ApplicationWindow.cover属性获取应用cover。这个属性应该被设置在组件上让cover显示在homescreen,通常还需要显示应用当前的状态。应用可以基于状态的改变更新cover,无论如何不应该在cover上显示动画。当应用转到前台运行时,cover会被自动隐藏。
        CoverActionList用于设置cover action,一个CoverActionList能够包含最多两个CoverAction元素。
一个应用应该总是具备cover。     
官方示例:

 CoverActionList {
     enabled: mode == "music"
     CoverAction {
         iconSource: player.playing ? "pause.png" : "play.png"
         onTriggered: player.togglePlaying()
     }
     CoverAction {
         iconSource: "next.png"
         onTriggered: player.nextSong()
     }
 }


ApplicationWindow是Sailfish应用最顶层的组件。每个Sailfish应用都必须有且仅有一个ApplicationWindow组件定义在ui的root层,它是app的入口。
主要功能:
 1、管理app里的page
 2、设置app的active cover page
 3、设置app背景图片
 4、处理横竖屏切换
大多数application window 包含一个initialPage,用于指定app被打开的时候显示的page。三、ApplicationWindow是Sailfish应用最顶层的组件。每个Sailfish应用都必须有且仅有一个ApplicationWindow组件定义在ui的root层,它是app的入口。
       主要功能:
            1、管理app里的page
            2、设置app的active cover page
            3、设置app背景图片
            4、处理横竖屏切换
        大多数application window 包含一个initialPage,用于指定app被打开的时候显示的page。

        每个application window都包含一个page stack,通过访问pageStack属性,可以决定app显示的页面。page stack由page对象组成,每一个page包含了在某个时刻显示的内容。一个page能够被添加到stack,或者从stack里移除。app 正在显示的页面就是page stack最后一个被添加进的page。

        如以下代码,应用被打开的时候显示一个按钮,当按钮被点击后切换到显示AnotherPage.qml的内容.

// main.qml
 import QtQuick 1.1
 import Sailfish.Silica 1.0

 ApplicationWindow {
     initialPage: Component {
         Page {
             Button {
                 text: "Ahoy!"
                 onClicked: pageStack.push("AnotherPage.qml")
             }
         }
     }
 }

       每个Sailfish app都能通过cover属性定义自己的active cover,当应用在后台运行时,active cover会显示在home screen界面。

ApplicationWindow {
     initialPage: Component { MyPage {} }
     cover: Component { MyCover {} }
 }


 

        在app中开发者可以使用allowedOrientations设置是否能进行横竖屏切换。
        ApplicationWindow的属性:
            allowedOrientations : enumeration
                  • Orientation.Portrait
                  • Orientation.Landscape
                  • Orientation.PortraitInverted
                  • Orientation.LandscapeInverted
                  • Orientation.All
         applicationActive : bool
              当应用在前台运行时为true, 当应用在后台运行并且cover被显示的时候为false。

         bottomMargin : real

         contentItem : Item
              包含在application window内部的子item。

         deviceOrientation : enumeration
               改变屏幕方向,属性值同allowedOrientations的前四个类型。

         orientation : enumeration
               屏幕方向

         initialPage : variant

         pageStack : PageStack

         cover : variant

         screenRotation : real

    ApplicationWindow方法:
           ApplicationWindow::activate ()
                     让app在前台运行
           ApplicationWindow::deactivate ()
                     让app运行在后台,并且最小化app作为active cover显示在home界面上。

ApplicationWindow {
     initialPage: Component { MyPage {} }
     cover: Component { MyCover {} }
 }


 


 

原文地址:https://www.cnblogs.com/javawebsoa/p/3053819.html