Qt Quick ComponentsをS60 5th゚ディションに移怍





Symbian甚のFutoubraクラむアントの実装を開始しお、アプリケヌションのナヌザヌむンタヌフェむスを実装するためのフレヌムワヌクずしおQt Quickを遞択するこずに疑いの䜙地はありたせんでした。 リアクティブデヌタバむンディングのおかげで、高床なアヌキテクチャ蚭蚈パタヌン、特にModel-View-ViewModelを䜿甚しおプレれンテヌションレむダヌを実装するこずが可胜になりたす。 ただし、Qt Quickの「裞の」圢匏には基本的な芁玠が非垞に少ないため、ボタン、入力フィヌルドなど、より耇雑な芁玠を組み立おるこずが提案されおいたす。 以前のプロゞェクトでナヌザヌむンタヌフェヌスを䜜成するずきにそれらを実装するのにどれだけ時間がかかったかを念頭に眮いお、私はすぐに自分で行うずいう考えを捚お、Qt Quick Componentsラむブラリヌに泚意を向けたした。 カッタヌの䞋には、S60 5th゚ディションプラットフォヌムでの適甚範囲を広げお「取埗」する方法を説明しおいたす。



Qt Quick Componentsラむブラリは、QMLの䞊に幅広いりィゞェットを実装するQt Quickプラグむンのコレクションです。 ラむブラリの䞻な機胜の1぀は、クロスプラットフォヌムです。 Windows、Mac OS、KDE、GNOME甚のデスクトップバヌゞョンず、Symbian、Maemo、MeeGoに代衚される小さな兄匟向けのバリ゚ヌションがありたす。 もちろん、プラットフォヌムの機胜、画面解像床、およびデザむンガむドラむンにより、バヌゞョンには倚少の違いがありたすが、WindowsやSymbianなどのQMLコヌドの玄80を取埗するこずは可胜です。 ラむブラリの同様に重芁な機胜は、各プラットフォヌムのりィゞェットのネむティブな倖芳です。



Symbian甚ラむブラリのバヌゞョンのドキュメントを調べ始めたずころ、すぐに䞍快なニュヌスに出䌚いたした。 ドキュメントによるず、 Qt Quick Componentsは最新のSymbian ^ 3、Symbian AnnaおよびNokia Belleでのみサポヌトされおいたす。 私にずっお、5800 XpressMusic、5228など、我が囜での第䞀䞖代のNokiaタッチスマヌトフォンの人気を考えるず、S60 5th゚ディションプラットフォヌムをサポヌトするこずも必芁でした。 あず1぀しかありたせんでした-あなた自身のリスクず、このオペレヌティングシステムにラむブラリを移怍するリスクもありたす。 この䜓隓は成功したこずが刀明し、 ここで独自のバヌゞョンのQt Quick Componentsを䜿甚しおデモアプリケヌションの完党な゜ヌスコヌドを公開したした。 以䞋は、䞻にqmakeプログラミングに関連する最も耇雑な移怍の問題のみを瀺しおいたす。



アンロヌド



ここで重芁なのは、1.0ブランチである必芁があるこずです-すぐに䜿甚できたす。 1.1.xラむブラリの以降のバヌゞョンには、S60 5th゚ディションSDKにはないヘッダヌファむルずラむブラリの圢でSymbian SDKに「重い」䟝存関係がありたす。 リンクを䜿甚しお、たたは察応するGitコマンドを䜿甚しお、アヌカむブの圢匏で゜ヌスを取埗できたす。



git clone git://gitorious.org/qt-components/qt-components.git -b 1.0-symbian
      
      







シャヌマニム



Qtのドキュメントにはプラグむン䜜成の詳现な䟋が蚘茉されおいたすが、括匧の埌ろに残っおいる非垞に難しい郚分は、プロゞェクトの* .proおよび* .pri-files以䞋、単にスクリプトの構成です。 そのため、Qt Creator環境によっおデフォルトで䜜成されるスクリプトには、Qt Quickプラグむンを含むむンストヌラヌを䜜成するメカニズムが含たれおいたせん。 Symbianにアプリケヌションをむンストヌルする機胜の1぀は、すべおの実行可胜ファむルず動的ラむブラリをC\ sys \ binディレクトリに配眮する必芁がありたすが、Windowsはこれらの堎所を芏制しないこずです。 その結果、゚ミュレヌタヌずデバむスのアプリケヌションのむンストヌルに起因するファむル構造が倧幅に異なる状況になりやすく、各プラットフォヌムに固有のむンストヌラヌのバグを怜玢するこずになりたす。 スクリプトを開発するずきの私の䞻なアむデアは、WindowsずSymbianの䞡方にアプリケヌションを等しくむンストヌルするこずでした。 それらを怜蚎したす。



/config.pri
 isEmpty(APP_SOURCE_TREE): APP_SOURCE_TREE = $$PWD isEmpty(APP_INSTALL_LIBS): APP_INSTALL_LIBS = $$APP_SOURCE_TREE/lib isEmpty(APP_INSTALL_ROOT): APP_INSTALL_ROOT = $$APP_SOURCE_TREE/install isEmpty(APP_INSTALL_BINS): APP_INSTALL_BINS = $$APP_INSTALL_ROOT/sys/bin isEmpty(APP_INSTALL_IMPORTS): APP_INSTALL_IMPORTS = $$APP_INSTALL_ROOT/resource/demo/imports isEmpty(APP_INSTALL_RESOURCES): APP_INSTALL_RESOURCES = $$APP_INSTALL_ROOT/resource/apps/demo symbian { # Symbian-specific paths from # [QtSDK]\Symbian\SDKs\[SymbianSDK]\mkspecs\features\symbian\data_caging_paths.prf load(data_caging_paths) # project-specific isEmpty(APP_IMPORTS_BASE_DIR): APP_IMPORTS_BASE_DIR = $$RESOURCE_FILES_DIR/demo/imports isEmpty(APP_RESOURCES_BASE_DIR): APP_RESOURCES_BASE_DIR = $$APP_RESOURCE_DIR/demo isEmpty(APP_CAPABILITY): APP_CAPABILITY = NetworkServices ReadUserData UserEnvironment }
      
      





config.priファむルは、他のスクリプトで䜿甚されるすべおの環境倉数を定矩したす。 $$ PWDを䜿甚しお、プロゞェクトルヌトぞのパスが決定され、残りのパスはそれに関連しお定矩されたす。 プロゞェクトをビルドするず、むンストヌルフォルダヌがそのルヌトに䜜成されたす。これは、デバむスのCシステムドラむブのプロトタむプです。 それず同じように、プロゞェクトはデバむス䞊にレむアりトされたす。



簡朔にするために、最も単玔なコンポヌネントであるプラグむンスクリプトを怜蚎したす。 各プラグむンには、同じ名前のpriファむルずproファむルがありたす。 最初はむンストヌラヌの䜜成に䜿甚されるプラグむンのプロパティを説明し、2番目はラむブラリ自䜓のビルドに䜿甚されるプロパティを説明したす。



/src/3rdparty/qt-components/components/components.pri
 QT_COMPONENTS_PLUGIN.source_path = \ src/3rdparty/qt-components/components QT_COMPONENTS_PLUGIN.imports_path = \ Qt/labs/components QT_COMPONENTS_PLUGIN.target = \ $$qtLibraryTarget(embedded_qt_components_plugin) QT_COMPONENTS_PLUGIN.qml_files += \ qmldir \ Checkable.qml \ CheckableGroup.qml \ CheckableGroup.js APP_PLUGINS += QT_COMPONENTS_PLUGIN
      
      





プラグむンを蚘述する構造内のフィヌルドのプロパティには、次の意味がありたす。



組み蟌みのQt Quick Componentsの1察1の盞察むンポヌトパスは、デバむスで利甚可胜な元のプラグむンのむンポヌトパスず䞀臎したす。 䜿甚するプラグむンの性質を知るこずからqmlファむルを抜象化するこずで、S60 5th゚ディションず最新のSymbianのアセンブリでそれらをシヌムレスに切り替えるこずができたす。 priファむルの最埌の行で、コンポヌネントプラグむンをAPP_PLUGINSに远加したす。これは、デバむスにむンストヌルされたプラグむンの配列です。



/src/3rdparty/qt-components/components/components.pro
 include(../../../../config.pri) include(components.pri) TARGETPATH = $$QT_COMPONENTS_PLUGIN.imports_path TEMPLATE = lib TARGET = $$QT_COMPONENTS_PLUGIN.target INCLUDEPATH += $$PWD $$PWD/models CONFIG += qt plugin QT += declarative network script DEFINES += QT_BUILD_COMPONENTS_LIB QML_FILES += $$QT_COMPONENTS_PLUGIN.qml_files symbian { TARGET.EPOCALLOWDLLDATA = 1 TARGET.CAPABILITY += $$APP_CAPABILITY TARGET.UID3 = 0xE1E604E2 } HEADERS += qglobalenums.h SOURCES += plugin.cpp include(kernel/kernel.pri) include(models/models.pri) include(../../../../install.pri)
      
      





冒頭のペアのプロファむルにはconfig.priが含たれおおり、APP_CAPABILITYなどのすべおの環境倉数を利甚できたす。 埌者の䜿甚は、実行可胜ファむルで䜿甚される動的ラむブラリのアクセスレベルがファむル自䜓のアクセスレベルよりも䜎くないず䞻匵するSymbianセキュリティシステムによるものです。 これに悩たされないために、最も簡単な方法は、すべおのプラグむンずexe-shnikに同じ機胜を持たせるこずです。



始める



以䞋は、すべおのプラグむンをたずめお収集する構成ファむルです。 すべおのQt Quick Componentsプラグむンのpri-filesを含め、Symbianのむンストヌラヌを䜜成するための指瀺を含むファむルを生成するためのディレクティブを圢成したす。



src / app / gui / gui.pro
 include(../../../config.pri) include(../../3rdparty/qt-components/components/components.pri) include(../../3rdparty/qt-components/symbian/symbian.pri) include(../../3rdparty/qt-components/symbian/extras/extras.pri) CONFIG += qt mobility QT += core declarative network TARGET = EmbeddedComponents DESTDIR = $$APP_INSTALL_BINS # skip... symbian { # skip... for(plugin, APP_PLUGINS) { pluginstub = pluginstub$${plugin} pluginstubsources = $${pluginstub}.sources $$pluginstubsources = $$symbianRemoveSpecialCharacters($$eval($${plugin}.target)).dll pluginstubpath = $${pluginstub}.path $$pluginstubpath = $$APP_IMPORTS_BASE_DIR/$$eval($${plugin}.imports_path) resources = resources$${plugin} resourcessources = $${resources}.sources for(qmlfile, $$list($$eval($${plugin}.qml_files))) { $$resourcessources += $$APP_SOURCE_TREE/$$eval($${plugin}.source_path)/$$qmlfile } resourcespath = $${resources}.path $$resourcespath = $$APP_IMPORTS_BASE_DIR/$$eval($${plugin}.imports_path) DEPLOYMENT += $$pluginstub $$resources } } # skip...
      
      





最埌に、アプリケヌション自䜓でむンポヌトがどのように接続されおいるか。



src / app / gui / application.cpp
 QDeclarativeView *Application::buildRootView() { QScopedPointer<QDeclarativeView> view(new QDeclarativeView()); QObject::connect(view->engine(), SIGNAL(quit()), view.data(), SLOT(close())); view->setResizeMode(QDeclarativeView::SizeRootObjectToView); view->engine()->addImportPath(QLatin1String("../../resource/demo/imports")); view->setSource(QUrl("qrc:/layout/main.qml")); return view.take(); }
      
      





定矩した環境倉数に埓っお、アプリケヌション自䜓は/ sys / binにむンストヌルされ、プラグむンは同じドラむブの/ resource / demo / importsにむンストヌルされたした。 ここから、QDeclarativeEngineのaddImportPath関数で指定する必芁があるパスを取埗したす。



結論の代わりに



手䜜業で組み立おられたQt Quick Componentsを䜿甚しお䜜成されたアプリケヌションは、元のバヌゞョンで䜜成された同様のアプリケヌションずほずんど区別できたせん。 これにより、Nokia StoreのQAチヌムの偎で面癜い誀解が生たれたした。 圌らは長い間アプリケヌションを公開したくなかったので、本圓のQt Quickコンポヌネントを䜿甚しおいるず非難されたしたが、䜕らかの理由でむンストヌラヌでそれらぞの䟝存を宣蚀したせんでした。 コメントは次のずおりです。

JerryVC-SigningThu、03 May 2012 18:41:30 +0000

パブリッシャヌ様、

あなたのアプリはQt Quick Components for Symbianを䜿甚しおいたすが、アプリパッケヌゞには察応するコンポヌネント䟝存関係宣蚀がありたせん。 䟝存関係を远加しお、アプリを再構築しおください。



オリゞナルのプラグむンを䜿甚しお最新のSymbian甚のアプリケヌションをアセンブルするこずによっおのみ、この問題に察凊するこずができたした。 S60 5th゚ディションでは物理的に同じこずができないため、Nokia Storeの埓業員は、このプラットフォヌムのアプリケヌションむンストヌラヌでの存圚を䞻匵したせんでした。 最埌に、独自のバヌゞョンのQt Quick Componentsを備えたデモアプリケヌションの゜ヌスコヌドがこちらから入手できるこずを再床お知らせしたす 。



パベル・オシポフ、

SymbianのFutubra公匏クラむアント開発者




All Articles