C
NXP 用MCUXpresso IDEプロジェクトの作成
このトピックでは、NXP のMCUXpresso IDEプロジェクトを作成し、アプリケーションとプラットフォームのソースコードを統合するための手順を順を追って説明します。
MCUXpresso IDE および ARM GCC ツールチェーンの両方を含む、MCUXpresso SDK バージョン 2.16.0 が必要です。Qt Online Installer が提供する SDK を使用するか、ご自身で SDK をダウンロードしてください。MCUXpresso IDE またはボード用 SDK の新しいバージョンでも動作する可能性はありますが、動作確認は行っていません。
SDKを自分でビルドする場合は、以下のコンポーネントをインストールしてください:
- すべてのツールチェーン(これにより、ARM GCC および MCUXpresso ファイルの両方が確実に含まれます)
- FreeRTOS
- VG-Lite GPU ライブラリ
新しいプロジェクトを作成します
SDKを任意のディレクトリに解凍し、以下の手順に従ってください:
- MCUXpresso IDEを起動し、ダウンロードしたSDKをインストールしてください:
- 「Window > Show View > Installed SDKs 」を選択し、SDKビューが表示されていることを確認してください。
- 「Installed SDKs 」に移動します。
- ビューを選択して長押しするか、右クリックして「Import folder... 」を選択します。SDKがアーカイブ形式の場合は、「Import archive... 」を選択することもできます。
- フォルダまたはアーカイブを選択し、「Open 」を選択して、SDKをIDEにインポートします。
- 「File > New > Create a new C/C++ Project 」を使用して、i.MX RT1170 EVKB用の新しいプロジェクトを作成します。
- 「evkbmimxrt1170 」ボードを選択し、「Next 」を選択します。
- 次の画面で、「MIMXRT1176DVMAA 」デバイスパッケージを選択します。プロジェクトの設定は次の通りである必要があります。
- コア:cm7 コアが「Standalone 」ロールに設定されています。
- ボード:Default board files
- プロジェクトタイプ:C++ Project
- プロジェクトオプション:SDK Debug Console が「UART 」に設定されています。「Copy sources 」と「Import other files 」の両方が選択されています。
以下のリストにあるコンポーネントも選択してください:
- Operating Systems
- RTOS > Core > FreeRTOS kernel
- Drivers
- Device > SDK Drivers
- anatop_ai
- clock
- common
- dcdc_soc
- elcdif
- gpio
- i2c
- iomuxc
- lcdifv2
- lpuart
- memory
- mipi_dsi
- nic301
- pmu
- pxp
- soc_mipi_csi2rx
- xip_device
- Device > SDK Drivers
- CMSIS Include
- CMSIS > CORE > CMSIS_Include_CM
- Device > CMSIS > MIMXRT1176_CMSIS
- Device > CMSIS > MIMXRT1176_system
- Utilities
- Device > SDK Drivers > lpuart_adapter
- Device > SDK Utilities
- assert
- debug_console
- serial_manager
- serial_manager_uart
- Board Components
- Board Support > SDK Drivers > xip_board
- Device > SDK Drivers
- display-hx8394
- display-rm68191
- display-rm68200
- xmcd
- Abstraction Layer
- Device > SDK Drivers
- dc-fb-common
- dc-fb-elcdif
- dc-fb-lcdifv2
- display-common
- Device > SDK Drivers
- Software Components
- Device > SDK Drivers
- display-mipi-dsi-cmd
- lists
- video-common
- Device > SDK Drivers
- Project Template
- Board Support > SDK Project Template > evkbmimxrt1170
- Other
- Device > Startup > MIMXRT1176_startup
「Next 」を選択して、次の画面に進んでください。
- 「Advanced project settings 」で、以下の設定を変更してください:
- Set Floating Point type:FPv5-D16 (Hard ABI)
- Language standard:GNU C++14 (-std=gnu++14)
「Finish 」を選択して、プロジェクトの設定を完了してください。
ピンを設定し、追加の SDK コンポーネントをインポートします
- 「ConfigTools > Pins 」オプションを使用して、NXP のi.MX RT1170ピンを設定します。詳細については、「NXP のi.MX RT1170ピンの設定」を参照してください。
- 追加のSDKコンポーネントをインポートします:
- プロジェクトを選択して長押しするか、右クリックして「Import 」を選択します。
- 「File System 」を選択します。
- 「From directory 」フィールドに「
<SDK_PATH>/components/gt911」を追加し、「fsl_gt911.h/*.cfiles」を選択します。 - 「Into folder 」フィールドに「
<PROJECT_NAME>/gt911」を追加し、「Finish 」を選択します。 <SDK_PATH>/middleware/vgliteから<PROJECT_NAME>/vgliteへ、以下のディレクトリ(その中のファイルおよびサブディレクトリを含む)をインポートします:incVGLiteVGLiteKernel
- 「
startup_MIMXRT1176_cm7.S」を「<SDK_PATH>/devices/MIMXRT1176/gcc」から「<PROJECT_NAME>/startup」へインポートします。プロジェクトから「<PROJECT_NAME>/startup/startup_mimxrt1176_cm7.c/.cpp」を削除します。 <SDK_PATH>/rtos/freertos/freertos-kernel/portable/MemMangからheap_4.cを<PROJECT_NAME>/freertos/freertos-kernel/portable/MemMangにインポートします。
アプリケーションのバックエンドを開発する
- UIコミュニケーター構造体を作成する
バックエンドにより、アプリケーションのUIはプラットフォームと通信し、ハードウェアから必要な情報を取得できるようになります。この例では、コミュニケーターがオンボードLEDの状態を取得します。次の図は、これら2つのコンポーネント間のワークフローを示しています:

- Project Explorer 内の「source 」フォルダを選択して長押しするか、右クリックし、「New > Class 」を選択します。
- 「Class name 」フィールドに「UICommunicator 」を追加します。「Header 」と「Source 」をそれぞれ「
uicommunicator.h」および「uicommunicator.cpp」に名前を変更し、「Finish 」を選択します。 - uicommunicator.h を開き、次のように変更します:
#ifndef UICOMMUNICATOR_H #define UICOMMUNICATOR_H #include <qul/singleton.h> #include <qul/property.h> #include <qul/eventqueue.h> struct UICommunicator : public Qul::Singleton<UICommunicator> { friend struct Qul::Singleton<UICommunicator>; enum Command { LED1State }; Qul::Property<bool> led1Status; void sendFromUI(Command command, bool commandData); void receiveToUI(Command command, bool commandData); private: UICommunicator(); UICommunicator(const UICommunicator &); UICommunicator &operator=(const UICommunicator &); }; struct CommandEvent { UICommunicator::Command command; bool commandData; }; class CommandEventQueue : public Qul::EventQueue<struct CommandEvent, Qul::EventQueueOverrunPolicy_Discard, 10> { public: void onEvent(const CommandEvent &commandEvent); }; namespace UI { void sendToThread(bool led1Data); } #endif // UICOMMUNICATOR_Hこのヘッダーでは、
Qul::Singletonを継承するUICommunicator構造体を宣言しており、UIコードとの統合を容易にしています。詳細については、Singleton クラスのリファレンスを参照してください。また、このヘッダーでは、コマンドのリストを定義する `
Command` 列挙型と、キューを管理するための `CommandEventQueue` も宣言されています。この列挙型により、UI とアプリケーション間の通信が可能になります。UICommunicatorまた、led1Statusプロパティを宣言し、搭載LEDの状態を示します。このプロパティはQMLコンテキストからアクセス可能であり、ボタンの色を決定するために使用されます。UICommunicatorクラスには、コマンドの送受信を行うsendFromUIおよびreceiveToUI関数が用意されています。また、スレッドセーフな方法でUIスレッドと通信するためのCommandEventQueueも備えています。アプリケーションスレッドからreceiveToUIを呼び出す代わりに、コマンドはCommandEventQueueに追加されます。Qt Quick のUltraliteスレッドは、receiveToUIを呼び出すことでこのキューを処理します。 - uicommunicator.cpp を開き、次のように変更してください:
#include "uicommunicator.h" #include "app_thread.h" UICommunicator::UICommunicator() { led1Status.setValue(false); } void UICommunicator::sendFromUI(Command command, bool commandData) { QUL_UNUSED(command) App::sendToThread(commandData); } void UICommunicator::receiveToUI(Command command, bool commandData) { switch (command) { case LED1State: led1Status.setValue(commandData); break; default: break; } } void CommandEventQueue::onEvent(const CommandEvent &commandEvent) { UICommunicator::instance().receiveToUI(commandEvent.command, commandEvent.commandData); } static CommandEventQueue commandEventQueue; void UI::sendToThread(bool led1Data) { CommandEvent commandEvent; commandEvent.command = UICommunicator::LED1State; commandEvent.commandData = led1Data; commandEventQueue.postEvent(commandEvent); }UICommunicatorクラスは、led1Statusをfalseに初期化します。そのsendFromUI()メンバ関数は、LEDの新しい状態を示すブール値をアプリケーションスレッドに送信します。receiveToUI()メンバ関数は、command引数を使用して、プロパティを更新する必要があるかどうかを判断します。次に、
CommandEventQueueクラスはonEvent()関数をオーバーライドします。この関数は、commandおよびcommandDataパラメータを指定して、UICommunicatorインスタンスのreceiveToUI()を呼び出します。さらに、CommandEventQueueの静的インスタンスが作成され、UI::sendToThread()関数によってイベントの投稿に使用されます。UI::sendToThread()は、指定されたブール値からCommandEventを構築し、処理のためにcommandEventQueueに追加します。これは、LEDの状態が変更された際にアプリケーションスレッドから呼び出されます。
Qt for MCUs CMSIS-Packを作成する
CMSIS-Packとは、MCUXpresso IDEプロジェクト内でQt for MCUs アプリケーションを設定するために必要な情報やファイルを含む、IDEに依存しないパッケージです。
-
qmlprojectexporterツールを使用してCMSIS-Packを作成します。UIプロジェクトに
UICommunicatorインターフェースを追加します:- 開く
path/to/YourProject.qmlproject Project内に以下を追加します:InterfaceFiles { files: ["path/to/mcuxpresso/project/source/uicommunicator.h"] }
export QUL_ROOT=/path/to/QtMCUs/2.12.2 export QMLPROJECT_FILE=/path/to/YourProject.qmlproject export PLATFORM_METADATA=$QUL_ROOT/lib/QulPlatformTargets_mimxrt1170-evkb-freertos_32bpp_Linux_armgcc-export.json export BOARDDEFAULTS=$QUL_ROOT/platform/boards/nxp/mimxrt1170-evkb-freertos/cmake/BoardDefaults_32bpp.qmlprojectconfig export CMSIS_EXPORT_DIR=/output/dir/of/your/choice $QUL_ROOT/bin/qmlprojectexporter $QMLPROJECT_FILE --platform=mimxrt1170-evkb-freertos --toolchain=GCC --platform-metadata=$PLATFORM_METADATA --boarddefaults=$BOARDDEFAULTS --outdir=$CMSIS_EXPORT_DIR --project-type=cmsisset QUL_ROOT=C:\path\to\QtMCUs\2.12.2 set QMLPROJECT_FILE=C:\path\to\YourProject.qmlproject set PLATFORM_METADATA=%QUL_ROOT%\lib\QulPlatformTargets_mimxrt1170-evkb-freertos_32bpp_Windows_armgcc-export.json set BOARDDEFAULTS=%QUL_ROOT%\platform\boards\nxp\mimxrt1170-evkb-freertos\cmake\BoardDefaults_32bpp.qmlprojectconfig set CMSIS_EXPORT_DIR=C:\output\dir\of\your\choice %QUL_ROOT%\bin\qmlprojectexporter.exe %QMLPROJECT_FILE% --platform=mimxrt1170-evkb-freertos --toolchain=GCC --platform-metadata=%PLATFORM_METADATA% --boarddefaults=%BOARDDEFAULTS% --outdir=%CMSIS_EXPORT_DIR% --project-type=cmsis - 開く
- 作成したCMSISパッケージをMCUXpresso IDEプロジェクトにインポートします
- 。「CMSIS-Pack Manager 」パースペクティブに移動します。
- 「Packs 」タブで、「Import Existing Packs... 」ボタンを選択します。
- qmlprojectexporterで指定された出力フォルダに移動します。packファイルは「
CMSIS」フォルダ内に、「<YourProject>-mimxrt1170-evkb-freertos-<OS>-armgcc-cmsis.pack」という名前で保存されているはずです。「Open 」を選択します。すると、そのpackがCMSIS-Packsのリストに表示されるはずです。 - 「Develop 」パースペクティブに戻ります。
- 「Project Explorer 」内のプロジェクト名を選択したままにしておくか、右クリックします。
- 「SDK Management > Add Open-CMSIS Components 」に移動します。
- 以下のコンポーネントを選択します:
-
Graphics (バリアント:Qt for MCUs )
- Platform DeviceLink library (バリアント:FreeRTOS )
- Platform sources (バリアント:FreeRTOS )
- Qt Quick Ultralite headers
- Qt Quick Ultralite libraries
- Project
- Qt for MCUs Application
-
Graphics (バリアント:Qt for MCUs )
- 「Qt for MCUs Application 」チェックボックスの横にある小さなボタンを選択します。これにより qmlprojectexporter が起動し、Qt Quick Ultralite アプリケーションがプロジェクトにエクスポートされます。
- エクスポートが完了するまで待ちます。次の画像に示すように、プロジェクトエクスプローラーにapplication.gpdscが表示されるはずです:
- 「Apply and save changes 」を選択します。

MCUXpresso IDE プロジェクトの設定
- プロジェクトを選択し、[File > Properties ] を選択して、以下の変更を行います:
- [C/C++ General > Paths and Symbols > Source Location
- ] を選択し、リストに以下を追加します:
gt911vglite
- [C/C++ General > Paths and Symbols > Includes] の下の C++ インクルードディレクトリリストに、以下のインクルードパスを追加します。[Add to all configurations ] および [Add to all languages] を選択します。このアプリケーションでは、以下のインクルードディレクトリを追加します:
- ワークスペース内の `
- `
- ワークスペース内の
- `
- `
- ワークスペース内の `
- `
- ワークスペース内の `
- `
ワークスペース内の `
vglite/VGLiteKernel/rtos`
- `
ワークスペース内の `
- 「C/C++ General > Paths and Symbols > Symbols 」を選択し、以下のプリプロセッサ定義を追加します:
- すべての構成および言語について:
BOARD_MIPI_PANEL_TOUCH_IRQ GPIO2_Combined_16_31_IRQnBOARD_MIPI_PANEL_TOUCH_IRQ_HANDLER GPIO2_Combined_16_31_IRQHandler-
CPP_NO_HEAPこれにより、cpp_config.cppに空の実装を導入することで、デフォルトのmallocおよびfreeの実装が無効化されます。 FSL_RTOS_FREE_RTOSPRINTF_ADVANCED_ENABLE 0PRINTF_FLOAT_ENABLE 0SCANF_ADVANCED_ENABLE 0SCANF_FLOAT_ENABLE 0SKIP_SYSCLK_INITUSE_SDRAMSDK_I2C_BASED_COMPONENT_USED 1XIP_BOOT_HEADER_ENABLE 1XIP_EXTERNAL_FLASH 1XIP_BOOT_HEADER_DCD_ENABLE 1
- すべての構成および言語について:
- を削除します 。
-
GNU C++ の場合
VGLITE_POINT_FILTERING_FOR_SIMPLE_SCALEQUL_STD_STRING_SUPPORT
- 「C/C++ Build > Settings > Tool Settings > MCU C++ Linker > Miscellaneous > Other objects 」を選択します。リスト内のライブラリの順序を次のように変更します:
- libQulCore_cortex-m7-hf-fpv5-d16_Linux_armgcc_MinSizeRel.a
- libQulControlsTemplates_cortex-m7-hf-fpv5-d16_Linux_armgcc_MinSizeRel.a
- libQulControls_cortex-m7-hf-fpv5-d16_Linux_armgcc_MinSizeRel.a
- libQulShapes_cortex-m7-hf-fpv5-d16_Linux_armgcc_MinSizeRel.a
- libQulTimeline_cortex-m7-hf-fpv5-d16_Linux_armgcc_MinSizeRel.a
- libQulMonotypeUnicodeEngineShaperDisabled_cortex-m7-hf-fpv5-d16_Linux_armgcc_MinSizeRel.a
- libQulMonotypeUnicode_cortex-m7-hf-fpv5-d16_Linux_armgcc_MinSizeRel.a
- libQulPNGDecoderNull_cortex-m7-hf-fpv5-d16_Linux_armgcc_MinSizeRel.a
- libQulDeviceLink_mimxrt1170-evkb-freertos_Linux_armgcc_MinSizeRel.a
- libQulCore_cortex-m7-hf-fpv5-d16_Windows_armgcc_MinSizeRel.a
- libQulControlsTemplates_cortex-m7-hf-fpv5-d16_Windows_armgcc_MinSizeRel.a
- libQulControls_cortex-m7-hf-fpv5-d16_Windows_armgcc_MinSizeRel.a
- libQulShapes_cortex-m7-hf-fpv5-d16_Windows_armgcc_MinSizeRel.a
- libQulTimeline_cortex-m7-hf-fpv5-d16_Windows_armgcc_MinSizeRel.a
- libQulMonotypeUnicodeEngineShaperDisabled_cortex-m7-hf-fpv5-d16_Windows_armgcc_MinSizeRel.a
- libQulMonotypeUnicode_cortex-m7-hf-fpv5-d16_Windows_armgcc_MinSizeRel.a
- libQulPNGDecoderNull_cortex-m7-hf-fpv5-d16_Windows_armgcc_MinSizeRel.a
- libQulDeviceLink_mimxrt1170-evkb-freertos_Windows_armgcc_MinSizeRel.a
注:ライブラリは 記載された順序で並べる必要があります。そうしないと、リンカーがリンキング順序の誤りによりシンボルが見つからないというエラーを報告する可能性があります。
- 「C/C++ Build > Settings > Tool Settings > MCU C++ Linker > Miscellaneous > Linker flags 」を選択し、「
-specs=nosys.specs」を追加します。注: Other options(-Xlinker [option]) フィールドにフラグを追加しないよう注意してください 。追加すると、リンカーが正しく認識できなくなります。
- 「Resource > Linked Resources 」を選択します。「Linked Resources 」タブで、「Variable Relative Location > MIMXRT1176xxxxx_cm7_flexspi_nor_sdram.ld 」を選択し、「Edit... 」ボタンをクリックします。「Edit Link Location 」に、「Location 」フィールドの内容をコピーします。
- 「C/C++ Build > Settings > Tool Settings > MCU C++ Linker > Managed Linker Script 」を選択し、「Manage linker script 」の値をクリアしてから、前の手順でコピーした内容を「Linker script 」フィールドに貼り付けます。
- [C/C++ ] を選択し、[Build] > [Settings] > [Tool Settings] > [MCU C++ Linker] > [General] の順に選択して、[No startup or default libs ] オプションのチェックを解除します。
- 変更を行った後、[Apply and Close ] ボタンを選択します。
gt911vglite/incvglite/VGLite/rtosvglite/VGLiteKernel__MCUXPRESSO - プロジェクトから「source/FreeRTOSConfig.h 」を削除します。生成された CMSIS パックには、プロジェクトで動作する FreeRTOSConfig.h がすでに含まれています。
- source/cpp_config.cpp を開き、以下の変更を行います:
- 追加
#include <FreeRTOS.h> #include <portable.h> #include <task.h> - すべての `
malloc()` および `free()` の呼び出しを、それぞれ `pvPortMalloc()` および `vPortFree()` の呼び出しに置き換えてください。注:
#ifdef CPP_NO_HEAP内の関数定義の名前は変更しないでください 。 - 必要に応じて、
malloc()およびfree()の空の実装を、FreeRTOS のメモリ割り当て関数への呼び出しに置き換えることもできます。
- 追加
アプリケーションのバックエンドを完成させる
source/<project-name>.cppを開き、その内容を次のコードに置き換えてください。注:
YOUR_UI_APPを、エクスポートされた UI アプリケーション名に置き換えてください 。#include <app_thread.h> #include <YOUR_UI_APP.h> #include <qul/application.h> #include <qul/qul.h> #include <platforminterface/log.h> #include <FreeRTOS.h> #include <task.h> #include <board.h> static void Qul_Thread(void *argument); static void App_Thread(void *argument); int main() { Qul::initHardware(); Qul::initPlatform(); if (xTaskCreate(Qul_Thread, "Qul_Thread", 32768, 0, 4, 0) != pdPASS) { Qul::PlatformInterface::log("Task creation failed!.\r\n"); configASSERT(false); } if (xTaskCreate(App_Thread, "App_Thread", 200, 0, 4, 0) != pdPASS) { Qul::PlatformInterface::log("Task creation failed!.\r\n"); configASSERT(false); } vTaskStartScheduler(); // Should not reach this point return 1; } static void Qul_Thread(void *argument) { (void) argument; Qul::Application _qul_app; static struct ::YOUR_UI_APP _qul_item; _qul_app.setRootItem(&_qul_item); #ifdef APP_DEFAULT_UILANGUAGE _qul_app.settings().uiLanguage.setValue(APP_DEFAULT_UILANGUAGE); #endif _qul_app.exec(); } static void App_Thread(void *argument) { App::run(); } extern "C" { void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName) { (void) xTask; (void) pcTaskName; Qul::PlatformInterface::log("vApplicationStackOverflowHook"); configASSERT(false); } void vApplicationMallocFailedHook(void) { Qul::PlatformInterface::log("vApplicationMallocFailedHook"); configASSERT(false); } }main()これにより、ボードが初期化され、以下の 2 つのタスクが作成されます:Qul_ThreadUIを実行するためにApp_ThreadLEDコマンドを処理し、LEDの状態に基づいてボタンの色を更新するようUIに信号を送る。
- source フォルダを選択して長押しするか、右クリックして「New > Header File 」を選択します。ファイル名を「
app_thread.h」とし、以下の内容を追加します:#ifndef APP_THREAD_H_ #define APP_THREAD_H_ namespace App { void run(); void sendToThread(bool ledStatus); } // namespace App #endif /* APP_THREAD_H_ */ - source フォルダを選択して長押しするか、右クリックして「New > Source File 」を選択します。ファイル名を「
app_thread.cpp」とし、以下のコードを追加します:#include "app_thread.h" #include "uicommunicator.h" #include "board.h" #include <fsl_gpio.h> #include <FreeRTOS.h> #include <queue.h> namespace App { static QueueHandle_t appQueue = NULL; void run() { // enable SW7/WAKE UP button interrupt NVIC_SetPriority(BOARD_USER_BUTTON_IRQ, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY); EnableIRQ(BOARD_USER_BUTTON_IRQ); USER_LED_INIT(0U); // initialize LED to be off appQueue = xQueueCreate(20, 1); bool ledState; while (true) { if (pdTRUE == xQueueReceive(appQueue, &ledState, portMAX_DELAY)) { if (ledState) USER_LED_ON(); else USER_LED_OFF(); UI::sendToThread(ledState); } } } void sendToThread(bool ledStatus) { if (appQueue) { xQueueSend(appQueue, &ledStatus, 0); } } } // namespace App extern "C" void BOARD_USER_BUTTON_IRQ_HANDLER(void) { GPIO_PortClearInterruptFlags(BOARD_USER_BUTTON_GPIO, 1U << BOARD_USER_BUTTON_GPIO_PIN); bool ledStatus = 0x1 ^ GPIO_PinRead(BOARD_USER_LED_GPIO, BOARD_USER_LED_GPIO_PIN); if (App::appQueue) xQueueSendFromISR(App::appQueue, &ledStatus, NULL); }このファイルでは、シンプルなアプリスレッドと、それに関連するすべての関数を定義します。まず、
appQueueを定義し、ボードの LED 状態(オンまたはオフ)を切り替えるコマンドを格納します。App::run関数は、app_threadのメインループです。この関数は、ボード上のユーザーボタンの割り込みを有効にし、ボードのLEDの1つをオフの状態に初期化し、スレッド用のキューを作成します。 その後、スレッドはLEDの状態を切り替えるコマンドを待機する無限ループに入ります。この状態情報は、UI(Qt Quick Ultralite)スレッドに送信されます。次に、
App::sendToThread関数があり、これは指定されたLEDの状態をappQueueに投稿します。最後に、ユーザーボタン用のIRQハンドラがあります。ボタンが押されると、LEDの現在の状態を確認し、その状態と逆の状態をappQueueに投稿します。
これでアプリケーションの準備は完了です。ビルドして、NXP i.MX RT1170ボードにフラッシュし、すべてが意図したとおりに動作するかどうかテストしてください。
注: アプリケーションがタッチ操作に反応しない場合は 、ボード上のSW7/WAKEUPボタンを押してみてください。
特定のQtライセンスの下で利用可能です。
詳細はこちら。