(YouTube) KDBA QML 学習ノート
旧バージョン(QMLファイル紹介)
main.qml
import QtQuick 2.0
Text {
text: "Hell World"
}
main.cpp
#include <QtQuick>
int mian(int argc, char *argn[])
{
QGuiApplication app(argc, argv);//QT开始
QQuickview view; //创建实际显示屏幕上的部分。
view.setSource(QUrl("main.qml"));//QML到Qt的最后一部分,加载QMl文件
view.show(); //进行显示
return app.exec; //QML层,相当于while循环,判断各事件
}
5-9-6-8-7视频中的讲解顺序
ビジネスロジックはC++で記述されており、ユーザーインターフェイスはQML形式を採用しています。
最新バージョン Qt6.5.1(QMLファイル導入)
main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
}
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}
main.cpp
これは、QML を使用してユーザー インターフェイスを作成する、C++ で記述された Qt Quick アプリケーションのファイルです。コードをステップごとに説明します。
-
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
これは、使用されている Qt バージョンが 6.0.0 未満かどうかを確認する前処理ディレクティブです。条件が true の場合、ブロック内のコードが実行されます。 -
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
setAttribute
高 DPI スケーリング機能を有効にする機能。高 DPI スケーリングは、アプリケーションが高解像度ディスプレイ上でユーザー インターフェイスを正しくスケーリングできるようにする機能です。 -
QGuiApplication app(argc, argv);
このコード行は、QGuiApplication
Qt Quick アプリケーションへのエントリ ポイントであるオブジェクトを作成します。 -
QQmlApplicationEngine engine;
このコード行は、QQmlApplicationEngine
QML ベースのユーザー インターフェイスのロードと実行を担当するオブジェクトを作成します。 -
const QUrl url(QStringLiteral("qrc:/main.qml"));
このコード行は、url
アプリケーション ユーザー インターフェイスにロードされる QML ファイルへのパスを表す定数変数を定義します。ここでは、リソース システムから「main.qml」という名前の QML ファイルを読み込みます (「qrc://」はリソース ファイルを表します)。 -
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { ... });
このコード行は、Lambda 関数を信号に接続しQQmlApplicationEngine
ますobjectCreated
。objectCreated
シグナルは、QML エンジンがルート QML オブジェクトを作成するときに発行されます。ここでは、QML オブジェクトが作成されるときに、Lambda 関数が呼び出されます。 -
if (!obj && url == objUrl) QCoreApplication::exit(-1);
Lambda 関数では、作成されたオブジェクト ( ) が存在するobj
かどうかnullptr
、およびobjUrl
作成されたオブジェクト ( ) の URL が以前に定義された QML ファイル ( ) の URL と同じであるかどうかを確認しますurl
。条件が true の場合、アプリケーションはステータス コード -1 で終了し、エラーが発生したことを示します。 -
engine.load(url);
url
このコード行は、以前に定義された QML ファイル ( )の URL を にロードしますQQmlApplicationEngine
。QML ファイルはエンジンによって処理および実行され、そのユーザー インターフェイスが表示されます。 -
return app.exec();
最後に、app.exec()
この関数はアプリケーションのイベント ループを開始します。これにより、アプリケーションは終了するまで実行され、イベントが処理され続けます。
したがって、このmain.cpp
ファイルは、QML ベースのユーザー インターフェイスで Qt Quick アプリケーションを実行するために必要な構成とオブジェクトをセットアップし、アプリケーションのイベント ループを開始します。Qt バージョンが 6.0.0 未満の場合、高 DPI スケーリングが有効になり、「main.qml」という名前のメイン QML ファイルがロードされます。
.pro ファイル
QT += quick
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =
# Default rules for deployment.
qnx: target.path = /tmp/$${
TARGET}/bin
else: unix:!android: target.path = /opt/$${
TARGET}/bin
!isEmpty(target.path): INSTALLS += target
.pro
これは、プロジェクトの構成とビルド ルールを記述するQt Quick アプリケーションのプロジェクト ファイル (通常は名前が付けられたファイル) です。このファイルの内容を 1 つずつ説明しましょう。
-
QT += quick
この行は、プロジェクトで使用される Qt モジュールを指定します。ここでは、quick
高速で動的なユーザー インターフェイスを作成するための Qt Quick フレームワークをサポートするモジュールが使用されています。 -
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
このコード行はコメントアウトされています。コメントを解除すると、プリプロセッサ マクロが定義されQT_DISABLE_DEPRECATED_BEFORE
、その値が に設定されます0x060000
。このマクロの目的は、Qt 6.0.0 より前で非推奨になった API を無効にして、非推奨の API を使用するコードがコンパイル時に失敗するようにすることです。 -
SOURCES += \ main.cpp
このコード行は、プロジェクト内の C++ ソース コード ファイルを指定しますmain.cpp
。これは、main.cpp
アプリケーションのエントリ ポイントとメイン ロジックを含むメインの C++ ソース ファイルです。 -
RESOURCES += qml.qrc
このコード行はリソース ファイルを指定します.qrc
。Qt では、リソース ファイルは、リソース (画像、スタイル シート、QML ファイルなど) をアプリケーションにパッケージ化するために使用されるファイルです。ここでは、qml.qrc
1 つ以上の QML ファイルを含むリソース ファイルです。 -
QML_IMPORT_PATH =
このコード行は、Qt Creator のコード モデルで QML モジュールを解析するための追加のインポート パスを設定します。ここでは特定のパスが指定されていないため、現在のプロジェクトのディレクトリがインポート パスとして使用されます。 -
QML_DESIGNER_IMPORT_PATH =
このコード行は、Qt Quick Designer でのみ QML モジュールを解析するための追加のインポート パスを設定します。ここでも、特定のパスが指定されていないため、現在のプロジェクトのディレクトリがインポート パスとして使用されます。 -
qnx: target.path = /tmp/$${TARGET}/bin
このコード行は、QNX プラットフォームでのインストール パスを設定するために使用されます。ターゲット プラットフォームが QNX の場合、target.path
に設定されます/tmp/目标名称/bin
。 -
else: unix:!android: target.path = /opt/$${TARGET}/bin
このコード行は、他の Unix プラットフォームでのインストール パスを設定するために使用されます。ターゲット プラットフォームが別の Unix プラットフォーム (Android を除く) の場合は、 に設定されtarget.path
ます/opt/目标名称/bin
。 -
!isEmpty(target.path): INSTALLS += target
このコード行は、target.path
以前に設定された値に基づいて、指定されたパスにターゲット ファイルをインストールします。
この.pro
ファイルは、Qt ビルド システムに Qt Quick アプリケーションのコンパイルおよびビルド方法を指示し、アプリケーションのソース コード ファイル、リソース ファイル、インストール パスなどの関連構成を指定します。
QMLの歴史
Qt アーキテクチャ
o` ファイルは、Qt ビルド システムに Qt Quick アプリケーションのコンパイルおよびビルド方法を指示し、アプリケーションのソース コード ファイル、リソース ファイル、インストール パスなどの関連構成を指定します。