QML界面控件加載與顯示順序

一、QML界面控件加載順序

QML在界面加載時的順序和我們認知的有很大的不同,有時候會對我們獲取參數以及界面實現造成很大的困擾

1、加載順序

import QtQuick 2.12
import QtQml 2.12
import QtQuick.Window 2.12
import QtQuick.VirtualKeyboard 2.4Window {id: windowwidth: 800height: 480visible: truetitle: qsTr("Hello World")Component.onCompleted:{console.log("Window success")                       // 2}Item {Component.onCompleted:{console.log("Item success")                     // 7}}Rectangle{anchors.fill: parentcolor: "red"Row{Repeater{model: 3Text {width: 100height: 50font.pixelSize: 30color: "blue"horizontalAlignment: Text.AlignHCenterverticalAlignment: Text.AlignVCentertext: qsTr("text")Component.onCompleted:{console.log("text success")             // 1}}Component.onCompleted:{console.log("Repeater success")              // 6}}Component.onCompleted:{console.log("Row success")                        // 5}}Component.onCompleted:{console.log("Rectangle success")                      // 4}}InputPanel {id: inputPanelz: 99x: 0y: window.heightwidth: window.widthstates: State {name: "visible"when: inputPanel.activePropertyChanges {target: inputPanely: window.height - inputPanel.height}}transitions: Transition {from: ""to: "visible"reversible: trueParallelAnimation {NumberAnimation {properties: "y"duration: 250easing.type: Easing.InOutQuad}}}Component.onCompleted:{console.log("InputPanel success")                     // 3}}
}

運行上面代碼后調試信息如下:

總結:

除C++模塊外,先是加載界面內的Repeater中重復的內容!!!!

再加載界面本身

然后按照從下到上,由外到內的加載,但是界面展示的順序是由上到下!!!!

(信號的改變以及loader需要加載的都是優先加載的)

信號的改變高于界面本身的加載

2、影響

由于Repeater中重復的控件是最先被加載的,所以如果在加載的時候給控件賦初值,而這個值又是從C++端獲取的參數,這時能否賦值成功取決于從C++獲取參數的方式,如下第一種方式可以,第二種就會有問題

(1)導入c++的Object模塊,實例化類對象,參數(類成員變量)在類的定義中使用 Q_PROPERTY 聲明過。qml在任何時候調用被Q_PROPERTY宏修飾過參數都是不影響的

例1:

類定義:

Q_PROPERTY(int sampMode READ getSampMode WRITE setSampMode NOTIFY paraChanged)
Q_PROPERTY(int offerMode READ getOfferMode WRITE setOfferMode NOTIFY paraChanged)

例2:

(2)通過函數等方法傳遞 的參數就要注意了,函數調用的時機就尤為重要,必須在控件加載前調用!!!如下:

  • C++返回一個QVariantList類型的值給到qml端

  • Qml導入模塊調用函數獲取返回值

  • 根據加載順序,這個時候在加載repeater的時候如果調用返回值的話,就會調用失敗

但如果將 通過函數獲取的C++參數綁定到一個變量上,qml通過變量來獲取C++參數的話,也是可以的。如下:

二、QML界面顯示順序

qml會先將界面中的控件加載完成再顯示,加載的順序并不是界面的顯示順序,界面顯示的順序是由上到下的!!! 如下代碼,實現一個點擊編輯框后彈出鍵盤,同時整個界面整體往上推,將編輯框顯示在鍵盤外面,以至不被鍵盤隱藏住

子界面會先顯示出來,title后顯示,當然人眼肯定是看不出來顯示順序的。如果想實現點擊編輯框,彈出鍵盤,同時將子界面往上移,但又不能超過title的功能,就需要將title放置在子界面的下面或將title的z調高,因為鍵盤往上推的時候,實際是改變了子界面的y,那么在改變后重新顯示的時候,如果title與子界面有了重疊,按照顯示順序,title要是在上面就會被子界面覆蓋掉(看著是被一起往上推了,實則是被覆蓋住了)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44697.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44697.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44697.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Open3D點云算法與點云深度學習案例匯總(長期更新)

目錄 引言 Open3D算法匯總 Open3D快速安裝 測試點云資料 一、點云的讀寫與顯示 二、KD tree和八叉樹的應用 三、點云特征提取 四、點云濾波算法 五、點云配準算法 六、點云分割算法(待更新) 七、常用操作 八、數據轉換 九、常用小工具 三維…

交換機的二三層原理

相同VLAN的交換機交換原理(二層交換原理): 交換機收到數據幀,首先會檢查數據幀的VLAN標簽和目標MAC,若屬于相同VLAN,且該目標MAC在本地MAC表中,則直接根據出接口進行數據轉發 不同VLAN的交換機…

九盾安防:如何調控叉車限速器的報警速度呢

在繁忙的物流倉儲和制造業環境中,叉車是不可或缺的搬運設備。然而,其高速行駛也帶來了潛在的安全隱患。為了確保作業人員和貨物的安全,又車限速器的設置顯得尤為關鍵。那么,如何調控叉車限速器的報警速度呢? 叉車限速器的速度調整…

復制vmware虛擬機文件并改名(文件名使用python替換)得到一臺新的虛擬機

文章目錄 需求實驗復制文件夾并重命名使用python將所有文件名“WinSer2022”字符替換成“wingetmac”修改虛擬機配置文件(.vmx)打開新的虛擬機成功 需求 將已有的Winser2022虛擬機復制成wingetmac并開機 實驗 復制文件夾并重命名 將"WinSer2022…

《人生苦短,我用python·九》python之線程池ThreadPoolExecutor的使用

Python線程池是一種管理和使用線程的高級抽象,使得線程的創建、分配和管理更加方便。通過線程池,可以避免頻繁地創建和銷毀線程,從而提高程序的性能。Python的concurrent.futures模塊提供了一個ThreadPoolExecutor類,可以方便地使…

了解并緩解 IP 欺騙攻擊

欺騙是黑客用來未經授權訪問計算機或網絡的一種網絡攻擊,IP 欺騙是其他欺騙方法中最常見的欺騙類型。通過 IP 欺騙,攻擊者可以隱藏 IP 數據包的真實來源,使攻擊來源難以知曉。一旦訪問網絡或設備/主機,網絡犯罪分子通常會挖掘其中…

1559. 二維網格圖中探測環

1559. 二維網格圖中探測環 給你一個二維字符網格數組 grid ,大小為 m x n ,你需要檢查 grid 中是否存在 相同值 形成的環。 一個環是一條開始和結束于同一個格子的長度 大于等于 4 的路徑。對于一個給定的格子,你可以移動到它上、下、左、右…

【Qt 初識】QPushButton 的詳解以及 Qt 中的坐標

文章目錄 1. Qt 中的信號槽機制 🍎2. 通過圖形化界面的方式實現 🍎3. 通過純代碼的方式實現按鈕版的HelloWorld 🍎4. 設置坐標 🍎 1. Qt 中的信號槽機制 🍎 》🐧 本質就是給按鈕的點擊操作,關聯…

C++之復合資料型態 第一部(參考 列舉 指標)

復合資料型態(compound type) 是由其他資料型態(data type) 定義出來的型態, C 中的復合資料型態包括參考(reference) 、列舉(enumeration) 、陣列(array) 、指標(pointer ) 、結構(structure) 及聯合(union) 。 參考 參考是變數(variable) 的別名(alias) &#x…

GuLi商城-商品服務-API-品牌管理-OSS獲取服務端簽名(續)

如何進行服務端簽名直傳_對象存儲(OSS)-阿里云幫助中心 gulimall-third-party服務的代碼: package com.nanjing.gulimall.thirdparty.controller;import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.common.utils.BinaryUtil; impor…

Linux開發:Fuse介紹

Fuse(filesystem in userspace),是一個用戶空間的文件系統。通過fuse內核模塊的支持,開發者只需要根據fuse提供的接口實現具體的文件操作時所對應的回調函數,就可以實現一個文件系統。由于其主要實現代碼位于用戶空間中,因此不需要重新編譯內…

實時數倉項目需求及架構設計

第2章實時數倉項目需求及架構設計 2.1 項目需求分析 1)采集平臺 ? (1)用戶行為數據采集平臺搭建 ? (2)業務數據采集平臺搭建 2)離線需求 … 2.2 項目框架 2.2.1 技術選型 ? 技術選型主要因素&a…

15 - matlab m_map地學繪圖工具基礎函數 - 一些數據轉換函數(二)

15 - matlab m_map地學繪圖工具基礎函數 - 一些數據轉換函數(二) 0. 引言1. 關于m_geodesic2. 關于mygrid_sand23. 結語 0. 引言 通過前面篇節已經將m_map繪圖工具中大多繪圖有關的函數進行過介紹,已經能夠滿足基本的繪圖需求,本節…

探索 `DatagramSocket` 類

DatagramSocket 類是 Java 網絡編程中的一個關鍵組件,專門用于處理 UDP(用戶數據報協議)通信。與基于連接的 TCP 不同,UDP 是一種無連接協議,適用于對速度和效率要求較高,但對可靠性要求相對較低的場景。 …

【JavaScript】包裝類

包裝類 JS 提供了三個主要的包裝類:String、Number、Boolean。如果嘗試把原始類型(string、number、boolean)數據當成對象使用,JS 會自動將其轉換為對應包裝類的實例。 我們先來看一下 “基本類型數據” 及 “其包裝類的實例” …

個人倒計時頁面源碼,實用倒計時單頁源碼

一、源碼描述 這是一款非常實用的個人倒計時頁面,支持設置未來一年時間,支持設置背景音樂,支持自定義下拉頁面,點擊向下箭頭查看。 二、源碼截圖 三、源碼下載

docker 常用命令,后面不斷更新

1.從Docker容器中下載文件到本地的方法 使用 docker cp 命令:該命令可以將文件或目錄從容器復制到主機。該方法簡單快捷,適用于少量文件的下載。 # 將容器名為my_container中的 /data/file.txt文件復制到本地/path/to/save/file.txt docker cp my_container:/data/…

深入探討【C++容器適配器】:現代編程中的【Stack與Queue】的實現

目錄 一、Stack(棧) 1.1 Stack的介紹 1.2 Stack的使用 1.3 Stack的模擬實現 二、Queue(隊列) 2.1 Queue的介紹 2.2 Queue的使用 2.3 Queue的模擬實現 三、容器適配器 3.1 什么是適配器 3.2 為什么選擇deque作為stack和…

kylin入門教程

Apache Kylin的入門教程主要涵蓋以下幾個方面: 一、Apache Kylin簡介 Apache Kylin是一個開源的分布式分析引擎,提供Hadoop之上的SQL接口及多維分析(OLAP)能力以支持超大規模數據。最初由eBay Inc.開發并貢獻至開源社區&#xf…

基于Vue和UCharts的前端組件化開發:實現高效、可維護的詞云圖與進度條組件

基于Vue和UCharts的前端組件化開發:實現高效、可維護的詞云圖與進度條組件 摘要 隨著前端技術的迅速發展和業務場景的日益復雜,傳統的整塊應用開發方式已無法滿足現代開發的需求。組件化開發作為一種有效的解決方案,能夠將系統拆分為獨立、…