在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何以模塊的方式導入QML目錄

工程師鄧生 ? 來源:嵌入式小生 ? 作者:嵌入式小生 ? 2022-08-31 09:16 ? 次閱讀

開篇

在《如何導入QML文檔目錄》一文中,描述了如何導入QML目錄。對于應用程序內組件集來說,在實際開發中,導入本地QML目錄非常方便。但是如果模塊目錄移動到了另一個位置,那么所有與導入此模塊的代碼(與導入相關的語句)都必須更新,這將是一個非常麻煩且糟糕的事情。本文將繼續該文中留下的話題:如何以模塊的方式導入。

使用QML模塊的優點如下:

(1)在一個項目中可以共享公共的QML類型。

(2)可用于發布基于QML的庫。

(3)可以模塊化開發,使應用程序只加載各自需要的庫。

(4)可以對QML類型和資源進行版本控制,這樣可以很容易的更新模塊。

從0到1

創建一個工程

首先使用QtCreator創建一個工程,這里命名為:CusModule,工程目錄結構如下圖所示:

0646f99e-28c7-11ed-ba43-dac502259ad0.png

上圖中,有一個描述qml應用的main.qml文件,還有一個main.cpp文件用于描述一個Qt應用,并創建QGuiApplication應用和QQmlApplicationEngineqml解析引擎。

創建模塊

假如我們需要創建一個模塊,將該模塊命名為CusComponent,該模塊里包含一組qml文件:MyRect10.qml、MyRect20.qml、MyText10.qml、MyRect30.qml文件。

在文件中分別寫上以下簡單的代碼:

//MyRect10.qml
importQtQuick2.0

Rectangle{
height:50
width:50
color:"blue"
}
//MyRect20.qml
importQtQuick2.0

Rectangle{
height:50
width:50
color:"red"
}
//MyRect30.qml
importQtQuick2.0

Rectangle{
height:50
width:50
color:"black"
}

//MyText10.qml
importQtQuick2.0
importQtQuick.Controls1.4

Label{
text:qsTr("iriczhao|自定義QML模塊");
}

接著在CusComponent目錄下添加一個qmldir文件,注意該文件名只能是qmldir,在該文件中放入以下代碼:

moduleCusComponent
CusMyRect1.0MyRect10.qml
CusMyText1.0MyText10.qml
CusMyRect2.0MyRect20.qml
CusMyRect3.0MyRect30.qml

qmldir文件是一個純文本文件,該文件內容由命令組成,用于描述組成該模塊的文件和'資源。語法如下(此處只列出兩條命令):

module

該命令用于聲明模塊的模塊標識符,是模塊的標識符,它必須與模塊的安裝路徑匹配。模塊標識符指令必須位于qml文件的第一行。

[singleton]

該命令用于聲明模塊可用的QML對象類型。

『singleton』用于聲明單列類型,該參數可選。

『TypeName』可用的類型名稱。

『InitialVersion』可用類型對應的模塊版本。

『File』是定義類型的QML文件的(相對)文件名。

qmldir文件中可以存在零個或多個對象類型聲明,但是每個對象類型在模塊的特定版本中必須有一個唯一的類型名稱。

完成后目錄結構如下:

066bbe3c-28c7-11ed-ba43-dac502259ad0.png

在QtCreator中的目錄結構如下圖所示:

0686a1ac-28c7-11ed-ba43-dac502259ad0.png

注,qmldir文件也要添加到資源管理中。

導入模塊

在main.qml文件中使用import語言導入模塊,語法如下:

import模塊名版本號

本文則使用import CusComponent 1.0導入,然后我們設計一個簡單的界面顯示,完整代碼如下:

importQtQuick2.15
importQtQuick.Window2.15
importQtQuick.Controls2.15

importCusComponent1.0

Window{
width:640
height:480
visible:true
color:"#89c3f6"
title:qsTr("HelloWorld")

//MyRect10.qml
CusMyRect{}

//MyText10.qml
CusMyText{
x:200
y:10
}
}

這時候,在QtCreator代碼編輯器中,我們可以看見幾個錯誤的地方:

06a0e260-28c7-11ed-ba43-dac502259ad0.png

接著,我們運行一下程序,將會報錯:module "CusComponent" is not installed

06c5ab0e-28c7-11ed-ba43-dac502259ad0.png

出現這三個問題的原因提示已經很明顯啦:那就是模塊沒有安裝,接下來讓我們來安裝模塊啦。

安裝模塊

當我們的模塊設計好后,需要安裝。安裝的本質就是將QML的解析路徑告訴QtCreator和QML解析引擎。

(1)將QML的解析路徑告訴QML解析引擎 這一點,使用qputenv(模塊路徑)或addImportPath(模塊路徑)函數實現,在本文中,如果使用qputenv,則需要在main()函數的開始處添加如下代碼:

qputenv("QML2_IMPORT_PATH",":/");

如果使用addImportPath(),則需要在QML解析引擎下添加如下代碼:

06e238e6-28c7-11ed-ba43-dac502259ad0.png

注,上述路徑是相對于資源系統的,

我們可以使用QQmlApplicationEngine的importPathList()函數查看當前QML解析引擎導入的路徑都包含了哪些,是否包含了我們需要的模塊路徑。

好啦,至此,我們已經將QML的解析路徑告訴了QML解析引擎。這時候,應用軟件是可以啟動運行了,如下圖所示:

0707effa-28c7-11ed-ba43-dac502259ad0.png

但是,QtCreator代碼編輯器中的問題依然存在:QML module not found(CusComponent)和對象類型不高亮顯示。這時候,還需要我們將QML的解析路徑告訴QtCreator:在.pro工程描述文件中,添加如下代碼:

072d68b6-28c7-11ed-ba43-dac502259ad0.png

即可解決。

注意:路徑與在QML的解析路徑告訴QML解析引擎時設置的路徑相同

備注

(1)在設置導入模塊路徑時需要注意路徑的寫法,例如,如果本例寫成/CusComponet是無法正確安裝模塊的。這一點,我們可以理解成:QML模塊是需要一個模塊名的,在寫模塊導入路徑時,寫到模塊名上一級目錄就可以了,不能寫到模塊名,本文模塊名則是:CusComponet。

(2)編寫模塊描述文件qmldir時,是可以指定qml組件類型的版本號的,這一點則是創建QML模塊的一個重要優點,例如,如果將本文的模塊導入語句改成:import CusComponent 2.0,就會報:CusMyText is not a type信息了且應用無法啟動運行。(模塊的版本控制將在后續文章中寫到啦)

(3)在QtCreator中,如果導入語句語法和用法都正常,且能正常啟動運行qml程序,但是在代碼編輯器中依然會報:QT Unknown component(M300)錯誤。

這是因為QtCreator的代碼模型沒有重置更新??砂凑障铝胁襟E解決:

依次點擊:工具 --> QML/JS --> 重置代碼模型,重置更新一下代碼模型即可解決。

0757412c-28c7-11ed-ba43-dac502259ad0.png



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編輯器
    +關注

    關注

    1

    文章

    818

    瀏覽量

    31878

原文標題:從0到1如何創建一個QML模塊

文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Simcenter FLOEFD EDA Bridge模塊:使用導入的詳細PCB設計和IC熱特性來簡化熱分析

    的EDABridge模塊可將印刷電路板(PCB)詳細導入到您選擇的機械計算機輔助設計(MCAD)工具中,為熱分析做準備。一直以來,訪問PCB數據的有效方法是使用中間數
    的頭像 發表于 06-10 17:36 ?388次閱讀
    Simcenter FLOEFD EDA Bridge<b class='flag-5'>模塊</b>:使用<b class='flag-5'>導入</b>的詳細PCB設計和IC熱特性來簡化熱分析

    碳化硅何以英飛凌?—— SiC MOSFET性能評價的真相

    在碳化硅(SiC)技術的應用中,許多工程師對SiC的性能評價存在誤解,尤其是關于“單位面積導通電阻(Rsp)”和“高溫漂移”的問題。作為“碳化硅何以英飛凌”的系列文章,本文將繼續為您揭開這些誤區
    的頭像 發表于 04-30 18:21 ?169次閱讀
    碳化硅<b class='flag-5'>何以</b>英飛凌?—— SiC MOSFET性能評價的真相

    恩智浦eIQ Time Series Studio 工具使用攻略(四)-數據導入

    本期來到“Dataset"模塊。"Dataset"模塊用于"Projects"設置完成后導入用戶數據,該模塊包括數據有效性檢查和數據可視化。 下面
    的頭像 發表于 03-06 09:01 ?1170次閱讀
    恩智浦eIQ Time Series Studio 工具使用攻略(四)-數據<b class='flag-5'>導入</b>

    ADC08D1520QML可以采集到的最高頻率是多少?

    如題,ADC08D1520QML的采樣率為最高3GSPS。那如果我要采集的信號的頻率是1GHZ的,采集效果會如何呢?
    發表于 02-06 06:51

    如何導入Altium Designer的原理圖和PCB?

    “ ?KiCad可以支持直接導入Altium Designer的原理圖及PCB文件。與其它導入器不同,KiCad導入器可以直接導入源生的二進制文件(*.schdoc及*.pcbdoc)
    的頭像 發表于 11-12 12:21 ?5428次閱讀
    如何<b class='flag-5'>導入</b>Altium Designer的原理圖和PCB?

    華為創新技術入選工信部節能技術推薦目錄

    《節能技術推薦目錄》)。華為電力模塊模塊化不間斷電源、智能鋰電等7項數據中心創新技術,憑借優異的節能降碳效果成功入選《節能技術推薦目錄》。
    的頭像 發表于 11-06 17:34 ?960次閱讀
    華為創新技術入選工信部節能技術推薦<b class='flag-5'>目錄</b>

    AD畫完原理圖后如何導入PCB

    在Altium Designer(簡稱AD)中,將畫完的原理圖導入到PCB(Printed Circuit Board,印制電路板)是一個關鍵的設計步驟。以下是導入過程: 一、準備階段 確保原理圖
    的頭像 發表于 09-02 16:32 ?1.5w次閱讀

    何以及何時在PROFINET系統中使用以太網PHY

    電子發燒友網站提供《如何以及何時在PROFINET系統中使用以太網PHY.pdf》資料免費下載
    發表于 08-31 10:15 ?0次下載
    如<b class='flag-5'>何以</b>及何時在PROFINET系統中使用以太網PHY

    開關量模塊接線方式有哪些

    開關量模塊接線方式是自動化控制系統中的重要組成部分,它負責接收和處理開關信號,實現對設備的控制。 一、開關量模塊概述 1.1 開關量模塊定義 開關量
    的頭像 發表于 08-30 14:17 ?1890次閱讀

    何以及為何要在EtherCAT?應用中使用DP83826

    電子發燒友網站提供《如何以及為何要在EtherCAT?應用中使用DP83826.pdf》資料免費下載
    發表于 08-27 10:19 ?0次下載
    如<b class='flag-5'>何以</b>及為何要在EtherCAT?應用中使用DP83826

    LM555QML定時器數據表

    電子發燒友網站提供《LM555QML定時器數據表.pdf》資料免費下載
    發表于 08-20 09:29 ?0次下載
    LM555<b class='flag-5'>QML</b>定時器數據表

    嵌入式QT常見開發方式有哪些?

    JavaScript或C++后端處理復雜的業務邏輯和硬件接口操作。 4. 混合模式開發: 在一些項目中,可能采用Qt Widgets與Qt Quick/QML相結合的方式,根據實際需求選擇不同技術棧
    發表于 08-12 10:05

    ADC08D1520QML-SP高性能CMOS模數轉換器數據表

    電子發燒友網站提供《ADC08D1520QML-SP高性能CMOS模數轉換器數據表.pdf》資料免費下載
    發表于 07-22 09:50 ?0次下載
    ADC08D1520<b class='flag-5'>QML</b>-SP高性能CMOS模數轉換器數據表

    ADC12D1600QML低功耗、高性能CMOS模數轉換器數據表

    電子發燒友網站提供《ADC12D1600QML低功耗、高性能CMOS模數轉換器數據表.pdf》資料免費下載
    發表于 07-16 09:56 ?0次下載
    ADC12D1600<b class='flag-5'>QML</b>低功耗、高性能CMOS模數轉換器數據表

    DS1776QML PI總線收發器數據表

    電子發燒友網站提供《DS1776QML PI總線收發器數據表.pdf》資料免費下載
    發表于 07-01 14:28 ?0次下載
    DS1776<b class='flag-5'>QML</b> PI總線收發器數據表
    主站蜘蛛池模板: 黄色片香蕉视频 | 国产三级一区 | 色五阁 | 色多多在线观看播放 | 欧美精品一区二区三区在线播放 | 免费视频一区 | 色老久久精品偷偷鲁一区 | 夜夜骑日日射 | 加勒比色 | 激情深爱| 国产精品9999久久久久仙踪林 | 天天综合天天做 | 可以免费观看的黄色网址 | 午夜高清在线观看免费6 | 久热中文字幕在线精品免费 | 久久精品94精品久久精品 | 久久久福利 | 欧洲综合网 | 玖玖国产在线观看 | 免费人成网站 | 欧美.成人.综合在线 | 福利在线看 | 美女黄网站人色视频免费国产 | 玖玖草在线观看 | 五月婷六月 | 狠狠躁夜夜躁人人爽天天miya | 亚洲成人av | 狠狠干亚洲色图 | 性孕妇洗澡video国产 | 一级久久久 | 天天爽夜夜爽一区二区三区 | 日本黄色片黄色片 | 在线观看视频免费 | 伊人网在线免费视频 | 日本一区二区三区欧美在线观看 | 国产一区二卡三区四区 | 天天操夜夜做 | sihu国产午夜精品一区二区三区 | 国产精品xxxav免费视频 | 狠狠五月深爱婷婷网 | 色网综合 |