將QML與Qt Widgets相結合

2021-09-20 11:41:11 字數 2115 閱讀 6576

在使用 qt widgets 時,經常要實現一些比較炫酷的效果(例如:滑動、翻頁),這時選擇 qml 會顯得非常簡單。

那麼,問題來了:

將 qml 與 qt widgets 相結合

建立了乙個簡單的 qml 檔案,用於顯示乙個綠色的矩形,其中包含乙個文字。為了說明 qml 與 qt widgets 的互動,在矩形中新增了兩個訊號。

import qtquick 2.1

rectangle

mousearea

// 訊號處理程式(處理從 qt widgets 接收到的訊號)

oncsignal:

}

如果需要,可以將像往常一樣使用 qmlscene 來執行。

要載入和顯示 qml,可以使用以下兩種方式:

無論使用哪種方式,一旦主原始檔的 url 被指定,都將自動載入和顯示 qml 檢視。

注意:在 qml執行環境 中,還介紹了另一種方式 -qqmlengine + qqmlcomponent,但是這種方式不能以 view 的形式載入。

qquickwidget 是 qt 5.3 中提供的乙個類,繼承自 qwidget,它是 qquickwindow 乙個很方便的包裝器,用於顯示 qt quick 使用者介面。

使用方式:

qquickwidget *view =

new qquickwidget;

view->setsource(qurl::fromlocalfile("myqmlfile.qml"));

view->show();

qquickview 是 qt 5.0 中提供的乙個類,繼承自 qquickwindow(繼承自 qwindow),用於顯示 qt quick 使用者介面。

使用方式:

qquickview *view =

new qquickview;

view->setsource(qurl::fromlocalfile("myqmlfile.qml"));

view->show();

可以看到,兩者的使用方式幾乎沒什麼區別。但是,qquickwidget 基於 qwidget,而 qquickview 基於 qwindow,所以需要將其轉換為 qwidget,才能與 qt widgets 相結合。

這樣,就需要再引入乙個函式:

[static] qwidget *qwidget::createwindowcontainer(qwindow *window, qwidget *parent = q_nullptr, qt::windowflags flags = qt::windowflags())

該函式用於建立乙個 qwidget,可以將 window 嵌入到基於 qwidget 的應用程式中。

所以,要將 qquickview 轉為 qwidget,可以使用下述方式:

qquickview *view =

new qquickview();

qwidget *widget = qwidget::createwindowcontainer(view, this);

view->setsource(qurl("qrc:/main.qml"));

當一切準備就緒,就可以將 qml 與 qt widgets 完美結合在一起了:

最終效果:

原始碼如下:

#include

"widget.h"

#include

#include

#include

widget::widget(qwidget *

parent)

: qwidget(parent)

}void widget::receivefromqml()

結合之後,少不了通訊,這裡採用訊號槽的方式,通過 qml 的根元素 root 來傳送和接收訊號。

QML嵌入Qt Widgets及訊號槽的連線

最近在學習qml,想把qml嵌入到qwidgets中,用來實現一些動畫。本文參考知名博主一去 二三里的文章 將 qml 與 qt widgets 相結合 本程式實現 單擊qml頁面,更新按鈕的文字 單擊按鈕,更新qml頁面的顏色 訊號處理程式 處理從 qt widgets 接收到的訊號 oncsig...

玩轉Qml 5 Qml與C 互動

qml訪問c qml已經有很多功能,不過終歸會有不夠用或不適用的地方,需要通過與c 的互動進行功能擴充套件。這回濤哥嘗試把所有qml與c 互動相關的知識點都寫出來,做乙個透徹 全面的總結。玩轉qml 系列文章,配套了乙個優秀的開源專案 taoquick github 訪問不了或者速度太慢,可以用國內...

QML小例子 QML工程裡訊號與槽

1 效果 功能 點選左邊,會發出訊號,右邊會有個顏色動畫,然後計數 1 2 分析 一共有兩個物件,他們很多屬性都差不多,如可變顏色 原型 可變text.所以可以宣告乙個circle物件,然後sender和recver都繼承它 能夠通過sender控制recver,那麼sender一定有訊號發出,然後...