天天看點

Qt加載QML的2種方式

前言

之是以寫這篇文章,是因為在項目中經常會碰到一個問題,qml 檔案該如何加載到工程中,其實 Qt Quick APP 有兩種模式,另外,還有一種場景是,在 QWidget 界面上加載 QML 頁面,這三種情況的使用方式都不太一樣,這裡總結一下。

正文

QQmlApplicationEngined搭配 Window

示例:

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}           

這種方式是加載以 Window為跟對象的 QML 檔案,QML 擁有視窗的完整控制權,可以直接設定标題、視窗尺寸等屬性。

QQuickView 搭配 Item

#include <QGuiApplication>
#include <QQuickView>
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQuickView *view = new QQuickView;
    view->setResizeMode(QQuickView::SizeRootObjectToView);
    view->setSource(QUrl(QStringLiteral("qrc:/main.qml")));
    view->show();

    return app.exec();
}           

使用 QQuickView 顯示 QML 檔案,對視窗的控制權(标題、視窗尺寸)是在 C++代碼中,QML 檔案是以 Item (及 以Item為根的元件)作為根對象。

QQuickWidget 加載 QML

QQuickWidget *view = new QQuickWidget;
 view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));
 view->show();
           

QQuickWidget是繼承于 QWidget 控件,這種方式主要是用于在 QWidget 界面上加載 QML 界面。之前寫過一篇文章,主要講QQuickWidget加載 QML 的設定背景透明的問題,在這裡

--------------------- 

繼續閱讀