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.
