(YouTube) KDBA QML 学習ノート 1

(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 アプリケーションのファイルです。コードをステップごとに説明します。

  1. #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    これは、使用されている Qt バージョンが 6.0.0 未満かどうかを確認する前処理ディレクティブです。条件が true の場合、ブロック内のコードが実行されます。

  2. QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    setAttribute高 DPI スケーリング機能を有効にする機能。高 DPI スケーリングは、アプリケーションが高解像度ディスプレイ上でユーザー インターフェイスを正しくスケーリングできるようにする機能です。

  3. QGuiApplication app(argc, argv);
    このコード行は、QGuiApplicationQt Quick アプリケーションへのエントリ ポイントであるオブジェクトを作成します。

  4. QQmlApplicationEngine engine;
    このコード行は、QQmlApplicationEngineQML ベースのユーザー インターフェイスのロードと実行を担当するオブジェクトを作成します。

  5. const QUrl url(QStringLiteral("qrc:/main.qml"));
    このコード行は、urlアプリケーション ユーザー インターフェイスにロードされる QML ファイルへのパスを表す定数変数を定義します。ここでは、リソース システムから「main.qml」という名前の QML ファイルを読み込みます (「qrc://」はリソース ファイルを表します)。

  6. QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { ... });
    このコード行は、Lambda 関数を信号に接続しQQmlApplicationEngineますobjectCreatedobjectCreatedシグナルは、QML エンジンがルート QML オブジェクトを作成するときに発行されます。ここでは、QML オブジェクトが作成されるときに、Lambda 関数が呼び出されます。

  7. if (!obj && url == objUrl) QCoreApplication::exit(-1);
    Lambda 関数では、作成されたオブジェクト ( ) が存在するobjかどうかnullptr、およびobjUrl作成されたオブジェクト ( ) の URL が以前に定義された QML ファイル ( ) の URL と同じであるかどうかを確認しますurl条件が true の場合、アプリケーションはステータス コード -1 で終了し、エラーが発生したことを示します。

  8. engine.load(url);
    urlこのコード行は、以前に定義された QML ファイル ( )の URL を にロードしますQQmlApplicationEngineQML ファイルはエンジンによって処理および実行され、そのユーザー インターフェイスが表示されます。

  9. 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 つずつ説明しましょう。

  1. QT += quick
    この行は、プロジェクトで使用される Qt モジュールを指定します。ここでは、quick高速で動的なユーザー インターフェイスを作成するための Qt Quick フレームワークをサポートするモジュールが使用されています。

  2. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
    このコード行はコメントアウトされています。コメントを解除すると、プリプロセッサ マクロが定義されQT_DISABLE_DEPRECATED_BEFORE、その値が に設定されます0x060000このマクロの目的は、Qt 6.0.0 より前で非推奨になった API を無効にして、非推奨の API を使用するコードがコンパイル時に失敗するようにすることです。

  3. SOURCES += \ main.cpp
    このコード行は、プロジェクト内の C++ ソース コード ファイルを指定しますmain.cppこれは、main.cppアプリケーションのエントリ ポイントとメイン ロジックを含むメインの C++ ソース ファイルです。

  4. RESOURCES += qml.qrc
    このコード行はリソース ファイルを指定します.qrcQt では、リソース ファイルは、リソース (画像、スタイル シート、QML ファイルなど) をアプリケーションにパッケージ化するために使用されるファイルです。ここでは、qml.qrc1 つ以上の QML ファイルを含むリソース ファイルです。

  5. QML_IMPORT_PATH =
    このコード行は、Qt Creator のコード モデルで QML モジュールを解析するための追加のインポート パスを設定します。ここでは特定のパスが指定されていないため、現在のプロジェクトのディレクトリがインポート パスとして使用されます。

  6. QML_DESIGNER_IMPORT_PATH =
    このコード行は、Qt Quick Designer でのみ QML モジュールを解析するための追加のインポート パスを設定します。ここでも、特定のパスが指定されていないため、現在のプロジェクトのディレクトリがインポート パスとして使用されます。

  7. qnx: target.path = /tmp/$${TARGET}/bin
    このコード行は、QNX プラットフォームでのインストール パスを設定するために使用されます。ターゲット プラットフォームが QNX の場合、target.pathに設定されます/tmp/目标名称/bin

  8. else: unix:!android: target.path = /opt/$${TARGET}/bin
    このコード行は、他の Unix プラットフォームでのインストール パスを設定するために使用されます。ターゲット プラットフォームが別の Unix プラットフォーム (Android を除く) の場合は、 に設定されtarget.pathます/opt/目标名称/bin

  9. !isEmpty(target.path): INSTALLS += target
    このコード行は、target.path以前に設定された値に基づいて、指定されたパスにターゲット ファイルをインストールします。

この.proファイルは、Qt ビルド システムに Qt Quick アプリケーションのコンパイルおよびビルド方法を指示し、アプリケーションのソース コード ファイル、リソース ファイル、インストール パスなどの関連構成を指定します。

QMLの歴史

画像-20230802110713393

Qt アーキテクチャ

画像-20230802111418263

o` ファイルは、Qt ビルド システムに Qt Quick アプリケーションのコンパイルおよびビルド方法を指示し、アプリケーションのソース コード ファイル、リソース ファイル、インストール パスなどの関連構成を指定します。

おすすめ

転載: blog.csdn.net/qq_45865950/article/details/132068818