【qml-5】qml與c++交互(類型單例)

背景:

【qml-1】qml與c++交互第一次嘗試(實例注入)

【qml-2】嘗試一個有模式的qml彈窗

【qml-3】qml與c++交互第二次嘗試(類型注冊)

【qml-4】qml與c++交互(類型多例)

【qml-5】qml與c++交互(類型單例)

此篇接著上篇的話題,“類型多例”這個是我造的詞,這種方式使用簡單,如果咱們是熟悉qt的程序員,c++部分不需要特別注意,只要Q_INVOKABLE、槽、信號就行,亦即qml的工作原理。但之前提到,“類型多例”會在qml中實例化多次,所以就有了本次單例的做法。

類型定義:

相當于做個單例模式,但不太一樣。

//-----------cppbase.h--------------#ifndef CPPBASE_H
#define CPPBASE_H#include <QObject>
#include <QQmlEngine>class CppBase : public QObject
{Q_OBJECTQML_ELEMENT
public:explicit CppBase(QObject *parent = nullptr);static CppBase* instance();//這里Q_INVOKABLE QString f_INI_GetUserInfo();
};#endif // CPPBASE_H//-----------cppbase.cpp--------------#include "cppbase.h"Q_GLOBAL_STATIC(CppBase, globalCppBase)//這里CppBase* CppBase::instance() //這里
{return globalCppBase();
}CppBase::CppBase(QObject *parent): QObject{parent}
{}QString CppBase::f_INI_GetUserInfo()
{ ... }

上面需要注意不一樣的地方我加了注釋。這里不討論線程安全或者單例模式本身的話題,只說qml應用。

用它這個宏,如果不換行會有錯誤提示,換行了也有別的錯誤提示,還要求構造公有。如果不用這個宏,可以寫個傳統單例一樣用。

單例注冊:

qmlRegisterSingletonInstance("CppBase",  1, 0, "CppBase", CppBase::instance());

還是倆字符串參數,第一個用于import,第二個用于qml中類型引用。這里注冊的是單例。

qml調用:

import CppBaseItem {function f() {let sJsonStr = CppBase.f_INI_GetUserInfo();}
}

行了。

總結:

方法也越來越簡練了。還是三步:定義、注冊、使用。

關于自動補全,其實從第一種“實例方式”開始,qml都可以提示自動補全的,就是“實例注入”方式可能要運行一下才能提示,這個自從用了cmake以后,我覺得跟build目錄里生成的一堆有關系。這里不深究了。

其它幾種調用c++的方式都很方便,在qml中都有補全提示和高亮顯示。

如果需要成員的補全提示,比如打個點能提示函數名,就需要向qml注冊類型,而不是只注冊單例,就像c++里只引用可以前置聲明,想用里面東西還得包含頭文件,一個道理。如下:

qmlRegisterType<CppBase> ("CppBase",  1, 0, "CppBase");

我是為了方便注冊類型了。

creator還可以給js打斷點調試,非常方便。

本文完。

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

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

相關文章

循環神經網絡(RNN)、LSTM 與 GRU (一)

循環神經網絡&#xff08;RNN&#xff09;、LSTM 與 GRU &#xff08;一&#xff09; 文章目錄循環神經網絡&#xff08;RNN&#xff09;、LSTM 與 GRU &#xff08;一&#xff09;循環神經網絡&#xff08;RNN&#xff09;、LSTM 與 GRU一、RNN&#xff08;Recurrent Neural N…

【AAOS】Android Automotive 16模擬器源碼下載及編譯

源碼下載repo init -u https://android.googlesource.com/platform/manifest -b android-16.0.0_r2 repo sync -c --no-tags --no-clone-bundle源碼編譯source build/envsetup.sh lunch sdk_car_x86_64-bp2a-eng make -j8運行效果emualtorHomeAll appsSettingsHAVCNotification…

jvm三色標記

好的&#xff0c;咱們把專業概念和生活例子結合起來&#xff0c;一步一步說清楚三色標記法&#xff1a;一、核心概念&#xff1a;用“顏色”給對象貼“狀態標簽”就像給家里的物品貼標簽&#xff0c;每種顏色代表它在“垃圾回收&#xff08;大掃除&#xff09;”中的狀態&#…

生成式AI的能力邊界與職業重構:從“百科實習生“到人機協作增強器

根據微軟最新研究&#xff0c;基于20萬條Copilot使用數據及用戶反饋&#xff0c;研究者揭示了生成式AI在實際應用中的能力邊界與職業影響。數據顯示&#xff0c;用戶使用AI助手最頻繁的任務是信息獲取&#xff08;占比近40%&#xff09;&#xff0c;其次是公眾溝通類工作&#…

java17學習筆記

Java17是一個重要的特性發布&#xff0c;也是比較常用的一個版本&#xff0c;根據 2024Java生態統計&#xff0c;Java 17、11 和 8 的用戶比例分別為 35%、33% 和 29%。它遵循了自Java10以來引入的Java發布步調&#xff0c;并于2021年 9 月 14 日發布&#xff0c;在Java16發布后…

【AI應用】修改向量數據庫Milvus默認密碼

說明&#xff1a; 1&#xff09;部署向量數據庫milvus運行一段時間后&#xff0c;想開啟密碼認證登錄attu頁面 2&#xff09;開啟密碼認證登錄&#xff0c;提示用戶和密碼不正確&#xff0c;因為默認密碼已存儲在物理機 3&#xff09;通過attu管理頁面修改向量數據庫milvus默認…

分布式系統消息隊列:可靠投遞與延時消息實戰

在分布式系統架構中&#xff0c;消息隊列&#xff08;MQ&#xff09;作為解耦服務、削峰填谷、異步通信的核心組件&#xff0c;其消息投遞的可靠性與延時消息的精準性直接影響業務系統的穩定性。本文結合實際業務場景&#xff0c;詳細解析消息投遞的全流程設計與延時消息的通用…

Java 學習筆記(基礎篇6)

面向對象基礎1. 類和對象(1) 示例&#xff1a;public class Student {String name "張三";int age 23;public void study() {System.out.println("學習 Java");}public void eat() {System.out.println("吃飯");} }public class Test {public …

光學件加工廠倚光科技:陪跑光學未來力量

在光學創新的漫漫長路上&#xff0c;總有一些看似 “不劃算” 的堅持&#xff0c;卻在悄然改寫行業的未來。倚光科技的故事&#xff0c;就始于這樣一種選擇 —— 明知光學打樣利潤微薄&#xff0c;明知上百個項目中能走到量產的寥寥無幾&#xff0c;仍愿意投入全球頂尖的設備與…

RabbitMQ:生產者可靠性(生產者重連、生產者確認)

目錄一、生產者重連二、生產者確認一、生產者重連 當網絡不穩定的時候&#xff0c;利用重試機制可以有效提高消息發送的成功率。不過SpringAMQP提供的重試機制是阻塞式的重試&#xff0c;也就是說多次重試過程中&#xff0c;當前線程是被阻塞的&#xff0c;會影響業務性能。 …

【深度學習新浪潮】空天地數據融合技術在城市三維重建中的應用

空天地數據融合技術在城市三維重建中的應用已取得顯著進展,尤其在提升精度以滿足具身智能機器人仿真訓練需求方面,研究和產品均呈現多樣化發展。以下是關鍵研究進展、產品方案及精度要求的詳細分析: 一、研究進展與技術路徑 1. 多源數據融合的技術突破 時空基準統一:通過…

Selenium自動化測試入門:cookie處理

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快driver.get_cookies() # 獲得cookie 信息driver.get_cookies(name) # 獲得對應name的cookie信息add_cookie(cookie_dict) # 向cookie 添加會話信息delete_cookie(na…

快解析如何讓遠程訪問更安全?

一、勒索病毒攻擊服務器的途徑很多用戶服務器對外開放&#xff0c;實現外網訪問&#xff0c;擔心服務器被勒索病毒攻擊&#xff01;勒索病毒攻擊服務器的途徑之一是通過路由器開放的端口進行掃描攻擊&#xff0c;所以盡量不要在服務器的路由器和防火墻中開放端口二、快解析如何…

Linux下編譯ARPACK

本文記錄Linux下編譯ARPACK的流程。 零、環境 操作系統Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1oneAPI2024.2.1 一、依賴 1.1 安裝oneAPI 參見&#xff1a;Get the Intel oneAPI Base Toolkit , Get the Intel oneAPI HPC Toolkit 二、編譯ARPACK …

芋道RBAC實現介紹

說明&#xff1a;之前寫過一篇博客&#xff0c;介紹如何搭建一個基于角色的權限驗證框架 搭建一個基于角色的權限驗證框架 本文介紹在非常受歡迎的開源框架——芋道中是如何實現 RBAC 的&#xff0c;芋道的部署參考下面這篇文章&#xff1a; 芋道微服務代碼部署 介紹 一般…

Docker部署Jellyfin,沒有公網IP如何使用內網穿透遠程訪問?

Jellyfin是一款完全開源、免費的媒體服務器&#xff0c;可幫助你快速搭建屬于自己的私人流媒體平臺&#xff1a;電影、劇集、音樂、照片統統收納&#xff0c;跨設備隨點隨播。本文將以最簡潔的步驟&#xff0c;演示如何在Docker容器中部署Jellyfin&#xff0c;并通過貝銳花生殼…

Podman:Mysql(使用卷)

下載鏡像hpphcomp:~$ podman pull docker.1ms.run/mysql:latest Trying to pull docker.1ms.run/mysql:latest... Getting image source signatures Copying blob c81e70a25040 done | Copying blob 31f7d8dc4024 done | Copying blob b9916866e45f done | Copying blob …

2025年滲透測試面試題總結-21(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 一、文件上傳繞過方式&#xff08;Top 5&#xff09; 二、文件包含高危函數&#xff08;PHP為例&#xff0…

像海綿一樣吸收技術書籍的高效學習方法

像海綿一樣吸收技術書籍的高效學習方法前言六步高效閱讀法步驟1&#xff1a;快速瀏覽章節步驟2&#xff1a;先讀章末測驗步驟3&#xff1a;只讀粗體字步驟4&#xff1a;只讀每段的首句和末句步驟5&#xff1a;通讀整章步驟6&#xff1a;復習與重復高效學習技術書籍的實用技巧1.…

Day60--圖論--94. 城市間貨物運輸 I(卡碼網),95. 城市間貨物運輸 II(卡碼網),96. 城市間貨物運輸 III(卡碼網)

Day60–圖論–94. 城市間貨物運輸 I&#xff08;卡碼網&#xff09;&#xff0c;95. 城市間貨物運輸 II&#xff08;卡碼網&#xff09;&#xff0c;96. 城市間貨物運輸 III&#xff08;卡碼網&#xff09; 今天是Bellman_ford專場。帶你從普通的Bellman_ford&#xff0c;到隊列…