0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

QML加載模塊 WebView 與C++代碼通信控制WebView模塊的隱藏與顯示

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-05-23 09:12 ? 次閱讀

QML 中的 WebView 模塊是用于在應(yīng)用程序中嵌入 Web 內(nèi)容的模塊。它提供了一個 WebView 組件,可以通過載入 URL 或 HTML 內(nèi)容來顯示 Web 頁面。

以下是一個簡單的示例:


import QtQuick 2.0
import QtWebView 1.0

Item {
    WebView {
        url: "http://www.example.com"
        anchors.fill: parent
    }
}

這個示例使用了 WebView 組件來顯示 example.com 的網(wǎng)頁內(nèi)容。在組件中設(shè)置了 url 屬性來指定要顯示的頁面。anchors.fill: parent 則將 WebView 組件填充到父級元素的大小中。

除了加載 URL 外,WebView 還支持加載 HTML 內(nèi)容、JavaScript 和 CSS,并提供了一些其他的選項和屬性來控制頁面的呈現(xiàn)和交互。

要在 C++ 代碼中控制 QML 中的 WebView 模塊的顯示和隱藏,可以使用信號和槽(signals and slots)機(jī)制來實現(xiàn)。

首先,在 QML 中為 WebView 添加一個 visible 屬性,并將其綁定到一個 C++ 的槽函數(shù),如下所示:

import QtWebView 1.1
?
WebView {
   id: myWebView
   visible: webViewVisible // 綁定 visible 屬性到 C++ 槽函數(shù)
}

然后,在 C++ 代碼中,創(chuàng)建一個帶有 Q_PROPERTY 的類,用于控制 WebView 的可見性。例如:

class WebViewManager : public QObject
{
   Q_OBJECT
   Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibilityChanged)
?
public:
   explicit WebViewManager(QObject *parent = nullptr)
     : QObject(parent)
     , m_webView(new QQuickWidget)
   {
     // 設(shè)置 QQuickWidget 的屬性...
   }
?
   bool isVisible() const { return m_visible; }
?
public slots:
   void setVisible(bool visible)
   {
     if (m_visible != visible) {
       m_visible = visible;
       emit visibilityChanged(m_visible);
     }
   }
?
signals:
   void visibilityChanged(bool visible);
?
private:
   QQuickWidget *m_webView;
   bool m_visible = true;
};

在上述代碼中,WebViewManager 類包含一個 visible 屬性,以及相應(yīng)的讀寫方法和通知信號。在 setVisible() 槽函數(shù)中,我們檢查傳入的 visible 參數(shù)是否與當(dāng)前的可見性狀態(tài)不同,如果是,則更新狀態(tài)并發(fā)出 visibilityChanged 信號。

最后,在應(yīng)用程序的其他部分,可以創(chuàng)建一個 WebViewManager 的實例,并將其綁定到 QML 中的 WebView 模塊:

// 創(chuàng)建 WebViewManager 實例...
WebViewManager webViewManager;
?
// 將 WebViewManager 實例綁定到 QML 中的 WebView 模塊
QQmlEngine engine;
QQmlComponent component(&engine, "myqml.qml");
QQuickItem *item = qobject_cast(component.create());
QObject::connect(&webViewManager, &WebViewManager::visibilityChanged, item, [item](bool visible) {
   item->setProperty("webViewVisible", visible);
});
?
// 顯示 QML 界面...

在上述代碼中,首先創(chuàng)建了一個 WebViewManager 的實例,并將其連接到 QML 中的 WebView 模塊。然后,使用 QQmlComponent 類加載 QML 文件,并獲取 QQuickItem 對象,該對象代表在 QML 文件中創(chuàng)建的 WebView。最后,通過 connect() 函數(shù)將 visibilityChanged 信號與 QML 中的 webViewVisible 屬性綁定起來,從而控制 WebView 的可見性。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5046

    文章

    18821

    瀏覽量

    298672
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    5883

    瀏覽量

    135334
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2085

    瀏覽量

    73306
  • Qt
    Qt
    +關(guān)注

    關(guān)注

    1

    文章

    300

    瀏覽量

    37606
  • webview
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    3104
收藏 人收藏

    評論

    相關(guān)推薦

    Android webView播放flash的問題

    Java代碼  public class BrowserTest extends Activity {  private WebView mWebView;  @Override
    發(fā)表于 01-09 22:34

    001 - 使用鴻蒙WebView創(chuàng)建簡單瀏覽器 step 1

    /documentation/doc-guides/ui-java-component-webview-0000001092715158創(chuàng)建一個Page Ability,把基本布局弄好下面是代碼&
    發(fā)表于 04-17 10:26

    使用WebView組件實現(xiàn)應(yīng)用與Web頁面間的通信

    ,接下來我們將分別進(jìn)行介紹。WebView加載網(wǎng)絡(luò)Web頁面在entry/src/main/config.json中申請網(wǎng)絡(luò)權(quán)限ohos.permission.INTERNET,示例代碼如下
    發(fā)表于 08-26 10:39

    webview組件能獲得cookie數(shù)值,但app進(jìn)程一結(jié)束cookie的數(shù)值就失效是為什么?

    直接登陸而不用輸入賬號密碼。代碼如下:url1 = "xxxxxxxx";webView = (WebView) findComponentById
    發(fā)表于 03-25 10:36

    如何在鴻蒙的webview上面放其它組件?

    需求:需要在鴻蒙的webview顯示一個網(wǎng)頁,在webview上面再添加一個文本,但是無論怎么webview都會覆蓋掉其它組件,這個是鴻蒙把web
    發(fā)表于 03-28 10:00

    harmonyos webview布局中創(chuàng)建,增加load加載布局不顯示是為什么

    問題:webview布局中創(chuàng)建,增加load加載布局 實際運(yùn)行不顯示加載布局布局中webview的ohos:height=“200vp” 指
    發(fā)表于 04-02 15:16

    請問鴻蒙WebView如何設(shè)置字體大???

    WebView如何設(shè)置字體大小,難道只能設(shè)置自適應(yīng)??
    發(fā)表于 04-06 14:53

    鴻蒙的webview如何設(shè)置請求頭?

    這是Android的webview加載網(wǎng)頁設(shè)置請求頭的方式:Map webviewHead =new HashMap();webviewHead.put("Referer"
    發(fā)表于 05-11 11:29

    鴻蒙的webview加載不了網(wǎng)頁是為什么?

    鴻蒙的webview怎么使用呢 權(quán)限給了 就是加載不了網(wǎng)頁
    發(fā)表于 06-09 09:54

    鴻蒙webview加載Vue h5失敗是什么原因?qū)е碌模?/a>

    : ignored但該H5 url在Android webview能正常加載,且鴻蒙webview能正常加載https:百度、華為論壇等其他url,唯獨(dú)
    發(fā)表于 06-09 10:05

    harmonyos webview布局增加load不顯示是為什么?

    問題:webview布局中創(chuàng)建,增加load加載布局實際運(yùn)行不顯示加載布局布局中webview的ohos:height=“200vp”指定一
    發(fā)表于 06-13 10:19

    iOS系統(tǒng)webview與JS的交互

    昨天寫了Swift和JS的交互,既然寫了就把OC的也寫了出來: 第一部分:webview與Js的交互 第二部分:設(shè)定cookie 第三部分:修改header頭 1 交互 #import
    發(fā)表于 09-25 15:41 ?0次下載

    深入理解WebView

    摘要 作為Android開發(fā)者,我們都知道在手機(jī)中內(nèi)置了一款高性能 webkit 內(nèi)核瀏覽器,在 SDK 中封裝為一個叫做 WebView 組件。今天就為大家講講Android中WebView的詳細(xì)
    發(fā)表于 10-11 10:16 ?0次下載

    鴻蒙webview的使用和JS交互

    日常我們在開發(fā)項目時,為了項目快速的開發(fā)和迭代,難免會用到H5頁面。使用鴻蒙進(jìn)行項目開發(fā)時,也一樣免不了要加載H5頁面,在移動開發(fā)中打開H5頁面需要使用WebView組件。同時,為了和H5頁面進(jìn)行數(shù)據(jù)交換,有時候還需要借助JSBridge來實現(xiàn)客戶端與H5之間的通訊。
    的頭像 發(fā)表于 02-28 10:56 ?2365次閱讀
    鴻蒙<b class='flag-5'>webview</b>的使用和JS交互

    用于OHOS的WebView和Javascript之間可擴(kuò)展的雙向通信框架

    項目介紹 功能: 輕量可擴(kuò)展 OHOS WebView 和 Javascript 雙向交互框架。 安裝教程 方式一 1.將debugkit模塊內(nèi)容拷貝到自己項目對應(yīng)模塊目錄下 2.在需要使用的
    發(fā)表于 04-08 09:29 ?0次下載