wtorek, 3 sierpnia 2010

Szablon aplikacji Qt Quick na Symbiana

Tak jak wcześniej zauwazyłem, nie można uruchamiać aplikacji Qt Quick w sposób skryptowy. Co oznacza że dla Symbiana trzeba napisać szablon dzięki któremu będzie można testować działanie kodu Qt Quick w QML.

Tworzymy folder Szablon ( u mnie to jest na wirtualnym Windows XP w Windows 7 pod c:\Projekty\Szablon). Tworzymy plik projektu main.pro

# jakich bibliotek Qt chce się uzyć
QT       += core gui declarative
# nazwa aplikacji 
TARGET = Szablon
# informujemy że tworzymy aplikację Qt na Symbiana
TEMPLATE = app
# pliki żródlowe 
SOURCES += main.cpp
# pliki nagłowkowe
HEADERS  +=
# pliki designera Qt
FORMS    +=
# inne pliki używane w Qt (szczególnie pliki QML)
OTHER_FILES = main.qml
# plik zasobów zawierajacy pliki QML
RESOURCES = main.qrc 
# informacje które są potrzebne dla kompilatora dla Symbiana
symbian {
# plik ikonki programu 
ICON = icon.svg
# biblioteki potrzebne do zablokowania położenia aplikacji w orientacji poziomej
LIBS += -lcone -leikcore -lavkon
}
Tworzymy plik zasobów main.qrc
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
</RCC>

Zrobimy plik main.qml z kodem QML

import Qt 4.7
 
Rectangle {
    anchors.fill: parent; color: "black"
 
    Rectangle {
        anchors.centerIn: parent
        width: 100; height: 40; radius: 5; color: "lightgray"
 
        Text { anchors.centerIn: parent; text: "Koniec"; color: "black" }
 
        MouseArea {
            anchors.fill: parent
            onClicked: Qt.quit()
        }
    }
} 

Na koniec pozostał kod wykonywalny z main.cpp

#include <QtGui/QApplication>
#include <QDeclarativeView>
#include <QDeclarativeContext>
#include <QDeclarativeEngine>
#include <QGraphicsObject>

// biblioteki potrzebne do zablokowania zmiany orientacji
#ifdef Q_WS_S60
    #include <eikenv.h>
    #include <eikappui.h>
    #include <aknenv.h>
    #include <aknappui.h>
#endif

// funkcja main uruchamiająca aplikację
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
   // kod AVKON blokujący orientację 
#ifdef Q_WS_S60
 CAknAppUi* appUi = dynamic_cast<CAknAppUi*> (CEikonEnv::Static()->AppUi());
    TRAP_IGNORE(
        if(appUi) {
               appUi->SetOrientationL(CAknAppUi::EAppUiOrientationLandscape);
        }
    );
#endif
    QDeclarativeView view;
// będzie nam to potrzebne jak zechcemy uzywać innych bibliotek importowanych takich jak
// moduły WebView czy Particles
   view.engine()->addImportPath("./imports");          
// pobieramy plik z zasobów
     view.setSource(QUrl("qrc:/main.qml"));
// ustawiamy tryb zmiany rozmiaru
    view.setResizeMode(QDeclarativeView::SizeRootObjectToView);

#if defined(Q_WS_S60)
// ustawiamy na sztywno obszar gdzie będzie rysowane 
    view.setGeometry(QRect(0,0,640,360));
// wykonujemy pełne wyświetlenie
    view.showFullScreen();
#endif
// aplikacja ma zostać uruchomiona
    return app.exec();
}

Do plików w tym folderze trzeba dodać jakaś ikonkę SVG 44x44 z programu inkspace i nazwać ją icon.svg

Pozostało więc popracować nad kompilacją Uruchomiłem Start -> Programy-> Qt for Symbian by Nokia v4.7.0-beta2 (S60) -> Qt for Symbian Command Prompt i wpisałem

cd c:\Projekty\Szablon

następnie zrobiłem pliki potrzebne do komplikacji wpisując

gmake

następnie robię kompilację pod emulatora

make debug-winscw

uruchamiam emulatora

make run

zamykam emulatora i sprzątam po emulatorze poleceniem

abld reallyclean winscw udeb

następnie ustawiam pod kompilację na komórkę

make release-gcce

po skompilowaniu trzeba zrobić paczkę

make sis QT_SIS_OPTIONS=-u

zrobiłem nie podpisaną paczkę i trzeba ją podpisać

signsis -s szablon.sis szablon.sisx c:\key\imobile.cer c:\key\imobile.key

Instalujemy to na komórce i na koniec pozostaje posprzątanie po kompilacji

abld reallyclean gcce urel

a może jednak lepiej będzie używać polecenia do czyszczenia wszystkiego (łącznie z paczkami)

make distclean

Na zakończenie przyszła mi myśl, że prawdziwego programistę można poznać po tym jak sprząta po sobie.

Brak komentarzy: