Qt 載入QML 檔案的幾種方式
阿新 • • 發佈:2019-01-24
前言
之所以寫這篇文章,是因為在專案中經常會碰到一個問題,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 的設定背景透明的問題,在這裡