このページでは

C

Qt Quick Ultraliteアプリケーションをスタティックライブラリとしてビルドする

このトピックでは、Qt Quick Ultralite アプリケーションを静的ライブラリとしてビルドし、外部プロジェクトと統合する手順を説明します。

ライブラリとしてビルドする

Qt Quick Ultraliteでは、qul_add_targetCMake関数を使用して、Qt Quick Ultraliteアプリケーションをスタティックライブラリーとしてビルドすることができます。この関数は、引数リストにSTATIC_LIBRARY オプションが追加されない限り、デフォルトで実行可能なターゲットをビルドします。次の例を参照してください:

qul_add_target(example_app
               STATIC_LIBRARY
               source1.cpp
               source2.cpp)

注: スタティック・ライブラリーのセットアップは、Qt Quick UltraliteFreeRTOS プラットフォーム構成用にコンパイルすることはできませんが、ベアメタル構成用にビルドし、外部FreeRTOS セットアップで使用することはできます。この方法はうまくいきますが、予期せぬ動作につながる可能性があるため、お勧めできません。

qul_add_targetで GENERATE_ENTRYPOINT を使用する場合、qul_run.h ヘッダーファイルが生成され、ライブラリ出力ディレクトリにコピーされます。このヘッダーには、Qt Quick Ultraliteアプリケーションへの標準エントリーポイントを提供するC-Linkage付きqul_run() 関数が含まれています。

注: GENERATE_ENTRYPOINT を使用する場合、mainFile プロパティは必須です。

qul_add_target(example_app STATIC_LIBRARY QML_PROJECT example_app.qmlproject GENERATE_ENTRYPOINT)

Qt Quick Ultralite静的ライブラリーの作成と使用方法の例については、Qt Quick Ultralite static_library Exampleを参照してください。

C-リンケージ関数

Qt Quick Ultralite エンジンの初期化ステップとスケジューリングをより制御できるようにするため、スタティック ライブラリとしてアプリケーションを構築するときに、次の C-Linkage 関数が公開されます:

  • void qul_init_hardware(void);
  • void qul_init_hardware(void); qul_init_platform(void);
  • void qul_init_application(void);
  • QulErrorHandler *qul_set_error_handler(QulErrorHandler *handler);
  • const char *qul_error_code_to_string(enumQulError code);
  • uint64_t qul_update_engine(void);
  • void qul_app_exec(void);

生成されたqul_run.cpp ファイルは次のようになる:

extern "C" {

Qul::Application& _qul_app() {
    static Qul::Application _qul_app;
    return _qul_app;
}

mainScreen& _qul_item() {
    static struct ::mainScreen _qul_item;
    return _qul_item;
}

void qul_init_hardware(void)
{
    Qul::initHardware();
}

void qul_init_platform(void)
{
    Qul::initPlatform();
}

void qul_init_application(void)
{
    _qul_app().setRootItem(&_qul_item());

#ifdef APP_DEFAULT_UILANGUAGE
    _qul_app().settings().uiLanguage.setValue(APP_DEFAULT_UILANGUAGE);
#endif
}

uint64_t qul_update_engine(void)
{
    return _qul_app().update();
}

void qul_app_exec(void)
{
    _qul_app().exec();
}

} // extern "C"

int qul_run(bool initializeHardware)
{
    if (initializeHardware) qul_init_hardware();
    qul_init_platform();
    qul_init_application();
    qul_app_exec();
    return 0;
}

静的ライブラリーを外部プロジェクトと統合する

Qt Quick Ultraliteアプリケーションライブラリーを外部プロジェクトと統合するには、使用するすべてのQt Quick Ultraliteライブラリーとともに外部プロジェクトをリンクします。Qt Quick Ultraliteの設定によってライブラリのバージョンが異なるものがあります。次の表は、これらのライブラリのバージョンと、対応するQt Quick Ultralite 構成をまとめたものです:

フォントエンジン
MCU.Config.fontEngine == Static (default)MCU.Config.fontEngine == Spark
Qul::MonotypeUnicodeEngineShaperDisabledCMake プロパティ/変数1 ON またはTrue0 OFF またはFalse
MCU.Config.platformImageAlignment(デフォルト)

Qul::MonotypeFontEngine

Qul::MonotypeFontEngineAligned
MCU.Config.complexTextRendering(デフォルト)

Qul::MonotypeShaperEngine

Qul::MonotypeUnicodeEngine

Qul::MonotypeUnicodeEngineShaperDisabled
PNG デコーダー (PNG ファイルを使用する場合にのみ必要なライブラリ)
CMakeプロパティ/変数1,ON, またはTrue0 OFF またはFalse
イメージファイル.MCU.リソース圧縮Qul::PNGDecoderLodePNGQul::PNGDecoderNull (デフォルト)

さらに、Qt Quick Ultraliteinclude のパスを外部プロジェクトのインクルードパスにコピーまたは追加します。Qt Quick Ultralite アプリケーションがデフォルトのエントリポイントを提供する場合は、生成されたqul_run.h ヘッダーファイルのパスを外部プロジェクトのインクルードパスにコピーまたは追加します。

次に、外部プロジェクトの既存のQt Quick Ultraliteプラットフォーム抽象化コードを再利用するか、ターゲットボード用に新しいものを作成してください。詳細はQt Quick Ultraliteプラットフォーム移植ガイドを参照してください。

最後に、アプリケーションでQt Quick Ultraliteを実行するガイドに基づいて、外部プロジェクトにエントリポイント関数を作成します。デフォルトのエントリーポイントを使用する場合は、qul_run.h ヘッダーファイルをインクルードし、Qt Quick Ultralite エンジンを初期化して起動するために、必要な場所でqul_run() 関数を呼び出します。

注: initializeHardwarefalse に設定してqul_run() を呼び出した場合、Qul::initHardware() は呼び出されません。

qul_run()関数を呼び出した後、制御は各プラットフォーム抽象化固有のQul::Platform::exec()Qt for MCUs で提供されるプラットフォーム抽象化例に対するこの関数の実装はすべて、無限 while ループを含んでいます。これは、残りの非UIコードを対応するQul::Platform::exec() 実装に移すか、割り込みベースにする必要があることを意味します。

外部プロジェクトがRTOSを使用している場合、Qt Quick Ultraliteは別のスレッドで実行される可能性があります。そのような場合、組み込みイベントシステムは他のスレッドから直接更新できないため、ユーザーはQt Quick Ultraliteでスレッドセーフなインターフェースを提供する必要があります。

MCU.Config.fontEngineも参照してください

特定の Qt ライセンスの下で利用可能です。
詳細をご覧ください。