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.