QT:QML與C++交互

目錄

一.介紹

二.pro文件添加模塊

三.h文件

四.cpp文件

五.注冊

六.調用

七.展示效果

八.代碼

1.qmlandc.h

2.qmlandc.cpp

3.main.cpp

4.qml


一.介紹

在 Qt 中,QML 與 C++ 交互是非常重要的,因為它允許開發人員充分利用 QML 和 C++ 各自的優勢,實現更加靈活和高效的應用程序開發。

QML 是一種聲明性的語言,用于構建用戶界面,具有直觀、簡潔和易于理解的特點,適合用于描述界面的外觀和交互邏輯。而 C++ 是一種強大的編程語言,可以進行復雜的計算和處理邏輯,適合用于實現底層功能和業務邏輯。

通過 QML 與 C++ 的交互,可以實現以下作用和重要性:

1.性能優化:C++ 可以處理復雜的計算和邏輯,可以提高應用程序的性能。通過將一些計算密集型的任務交給 C++ 處理,可以提高應用程序的響應速度和性能表現。

2.業務邏輯處理:C++ 可以處理底層的業務邏輯,如數據處理、文件操作、網絡通信等。QML 可以專注于界面的呈現和交互邏輯,而將復雜的業務邏輯交給 C++ 處理,可以更好地分離界面和業務邏輯,提高代碼的可維護性和可重用性。

3.跨平臺開發:Qt 支持跨平臺開發,通過 QML 與 C++ 的交互,可以實現跨平臺的應用程序開發。開發人員可以在 QML 中描述界面,同時在 C++ 中處理平臺相關的邏輯,從而實現跨平臺的應用程序開發。

4.靈活性和可擴展性:通過 QML 與 C++ 的交互,可以實現界面與邏輯的分離,使得應用程序結構更加清晰和靈活。開發人員可以根據需求選擇在 QML 中實現界面邏輯,或者在 C++ 中實現復雜的邏輯,從而實現更加靈活和可擴展的應用程序。

總的來說,QML 與 C++ 交互的作用和重要性在于充分發揮各自的優勢,實現界面與邏輯的分離,提高應用程序的性能、可維護性和可擴展性,從而更好地滿足復雜應用程序的開發需求。

二.pro文件添加模塊

.qml模塊

三.h文件

1.首先,繼承自?QObject?類,是 Qt 框架中所有 QML 對象的基類。

2.其次,定義了一個?Q_PROPERTY?宏,用于在 QML 中聲明此類的屬性,并提供?READWRITE?和?NOTIFY?三個選項。這里定義了一個名為?name?的屬性,可以在 QML 中通過?name?訪問,通過?getname?函數獲取屬性值,通過?setName?函數設置屬性值,并通過?NameChangedSig?信號通知 QML 端屬性值的改變。

3.接下來,構造函數?qmlandc(),可以在此處進行一些初始化工作。

4.然后,定義了一個?setName?函數,用于在 C++ 端設置?name?屬性的值,并在函數末尾通過?NameChangedSig?信號通知 QML 端屬性值的改變。

5.接下來,定義了一個?getname?函數,用于在 C++ 端獲取?name?屬性的值。

6.最后,定義了一個?NameChangedSig?信號,用于在 C++ 端通知 QML 端?name?屬性值的改變。

四.cpp文件

1.首先,構造函數?qmlandc()?將?m_name?屬性初始化為字符串 "美女"。

2.然后,setName?函數用于設置?m_name?屬性的值。如果傳入的?name?參數與當前?m_name?屬性的值相同,則直接返回,不進行任何操作。否則,將?m_name?屬性的值設置為傳入的?name?參數,并通過?qDebug()?函數輸出當前?m_name?屬性的值,最后通過?emit?關鍵字觸發?NameChangedSig?信號。

3.最后,getname?函數用于獲取?m_name?屬性的值,并將其作為?QString?類型的返回值返回。

五.注冊

六.調用

七.展示效果

初始值調用c++中getname顯示為:美女,

點擊矩形框調用c++中setname為:帥哥。

八.代碼

1.qmlandc.h

#ifndef QMLANDC_H
#define QMLANDC_H#include <QObject>
#include <QDebug>class qmlandc : public QObject
{Q_OBJECTQ_PROPERTY(QString name READ getname WRITE setName NOTIFY NameChangedSig)public:qmlandc();void setName(QString name);QString getname();signals:void NameChangedSig();public slots:private:QString m_name;
};#endif // QMLANDC_H

2.qmlandc.cpp

#include "qmlandc.h"qmlandc::qmlandc()
{m_name = "美女";
}void qmlandc::setName(QString name)
{if(m_name == name){return ;}m_name = name ;qDebug()<<"aaaaaaaa"<<m_name;emit NameChangedSig();
}QString qmlandc::getname()
{return  m_name;
}

3.main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlEngine>
#include "qmlandc.h"
int main(int argc, char *argv[])
{QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QGuiApplication app(argc, argv);//qmlRegisterType注冊c++類型至qml//arg1:import時模塊名//arg2:主版本號//arg3:次版本號//arg4:qml類型名qmlRegisterType<qmlandc>("Qmlqmlandc", 1, 0 ,"Qmlqmlandc");QQmlApplicationEngine engine;const QUrl url(QStringLiteral("qrc:/main.qml"));QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,&app, [url](QObject *obj, const QUrl &objUrl) {if (!obj && url == objUrl)QCoreApplication::exit(-1);}, Qt::QueuedConnection);engine.load(url);return app.exec();
}

4.qml

import QtQuick 2.7
import Qmlqmlandc 1.0
import QtQuick.Window 2.2
import QtQuick.Controls 1.4Window {visible: truewidth: 400height: 400Qmlqmlandc{id:_Qmlqmlandc}Rectangle{anchors.fill: parentRectangle{width: 50height: 50border.width: 1border.color: "black"MouseArea{anchors.fill: parentonClicked: {_Qmlqmlandc.name = "帥哥"}}}Text {anchors.right: parent.rightanchors.rightMargin: 100font.pixelSize: 30text: _Qmlqmlandc.name}}}

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

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

相關文章

我21歲玩“擼貨”,被騙1000多萬

最近&#xff0c;擼貨業界內發生了一些頗受矚目的事件。 在鄭州&#xff0c;數碼檔口下面搶手團長跑路失聯&#xff0c;涉及金額幾百萬&#xff0c;在南京&#xff0c;一家知名的電商平臺下的收貨站點突然失聯&#xff0c;涉及金額高達一千多萬&#xff0c;令眾多交易者震驚不已…

用scp將文件夾從一個服務器備份到另一個服務器

用scp將文件夾從一個服務器備份到另一個服務器 問題描述解決辦法 問題描述 公式服務器要回收了&#xff0c;如何將數據備份到另一個服務器上。 解決辦法 代碼如下 scp -P 32660 -r /path/of/the/original/file username10.258.36.187:/path/of/the/target/filescp -P 目標…

YOLOv8改進 | 圖像修復 | 適用多種復雜場景的全能圖像修復網絡AirNet助力YOLOv8檢測(全網獨家首發)

一、本文介紹 本文給大家帶來的改進機制是一種適用多種復雜場景的全能圖像修復網絡AirNet&#xff0c;其由對比基降解編碼器&#xff08;CBDE&#xff09;和降解引導修復網絡&#xff08;DGRN&#xff09;兩個神經模塊組成&#xff0c;能夠在未知損壞類型和程度的情況下恢復受…

Java | Leetcode Java題解之第92題反轉鏈表II

題目&#xff1a; 題解&#xff1a; class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {// 設置 dummyNode 是這一類問題的一般做法ListNode dummyNode new ListNode(-1);dummyNode.next head;ListNode pre dummyNode;for (int i 0; …

【SQL】SQL常見面試題總結(3)

目錄 1、聚合函數1.1、SQL 類別高難度試卷得分的截斷平均值&#xff08;較難&#xff09;1.2、統計作答次數1.3、得分不小于平均分的最低分 2、分組查詢2.1、平均活躍天數和月活人數2.2、月總刷題數和日均刷題數2.3、未完成試卷數大于 1 的有效用戶&#xff08;較難&#xff09…

藍橋杯 EDA 組 歷屆國賽真題解析

一、2021年國賽真題 1.1 CN3767 太陽能充電電路 CN3767 是具有太陽能電池最大功率點跟蹤功能的 4A&#xff0c;12V 鉛酸電池充電管理集成電路。 最大功率點應指的是電池板的輸出電壓&#xff0c;跟蹤電壓其做保護。當然 CN3767 也可以直接使用直流充電&#xff0c;具體可以閱讀…

ROS 2邊學邊練(49)-- 生成URDF文件

前言 大多數機器人學家都在團隊中工作&#xff0c;這些團隊中往往包括機械工程師&#xff0c;他們負責開發機器人的CAD模型。與手動創建URDF&#xff08;統一機器人描述格式&#xff09;文件不同&#xff0c;可以從許多不同的CAD和建模程序中導出URDF模型。這些導出工具通常…

[POJ-1321]棋盤問題

題源:POJ-1321 深搜板子題&#xff0c;非常基礎&#xff0c;難度不大 思路1&#xff1a;廣搜行 深搜列 #include<iostream> #include<cstring> using namespace std; const int MAX9; int a,b,ans; char m[MAX][MAX]; //深搜列&#xff0c;廣搜行 bool h[MAX]; v…

DS高階:跳表

一、skiplist 1.1 skiplist的概念 skiplist本質上也是一種查找結構&#xff0c;用于解決算法中的查找問題&#xff0c;跟平衡搜索樹和哈希表的價值是一樣的&#xff0c;可以作為key或者key/value的查找模型。skiplist是由William Pugh發明的&#xff0c;最早出現于他在1990年發…

Python學習之路 | Python基礎語法(一)

數據類型 Python3 中常見的數據類型有&#xff1a; Number&#xff08;數字&#xff09;String&#xff08;字符串&#xff09;bool&#xff08;布爾類型&#xff09;List&#xff08;列表&#xff09;Tuple&#xff08;元組&#xff09;Set&#xff08;集合&#xff09;Dict…

鴻蒙HDC命令行工具:模擬操作

模擬操作 uinput用于輸入模擬操作&#xff0c;其命令幫助手冊為&#xff1a; > hdc shell uinput --help Usage: uinput <option> <command> <arg>... The option are: -M --mouse //模擬鼠標操作 commands for mouse: -m <dx> <d…

【Image captioning】基于檢測模型網格特征提取——以Sydeny為例

【Image captioning】基于檢測模型網格特征提取——以Sydeny為例 今天,我們將重點探討如何利用Faster R-CNN檢測模型來提取Sydeny數據集的網格特征。具體而言,這一過程涉及通過Faster R-CNN模型對圖像進行分析,進而抽取出關鍵區域的特征信息,這些特征在網格結構中被系統地…

1金融風控相關業務介紹

金融風控相關業務介紹 學習目標 知道常見信貸風險知道機器學習風控模型的優勢知道信貸領域常用術語含義1 信貸&風控介紹 信貸業務,就是貸款業務,是商業銀行和互聯網金融公司最重要的資產業務和主要贏利手段 通過放款收回本金和利息,扣除成本后獲得利潤。貸款平臺預測有…

java中什么是方法的返回值?方法有哪幾種類型?

在Java中&#xff0c;方法的返回值是指方法執行后返回給調用者的結果。返回值可以是任何數據類型&#xff0c;包括基本數據類型&#xff08;如int、float&#xff09;和引用數據類型&#xff08;如String、對象&#xff09;。返回值的主要作用是將方法執行的結果傳遞給調用該方…

springboot集成dubbo實現微服務系統

目錄 1.說明 2.示例 3.總結 1.說明 dubbo官網&#xff1a;https://cn.dubbo.apache.org/zh-cn/ Apache Dubbo 是一款 RPC 服務開發框架&#xff0c;用于解決微服務架構下的服務治理與通信問題&#xff0c;支持多種語言&#xff0c;官方提供了 Java、Golang 等多語言 SDK 實…

什么是Vue.js? Vue.js簡介

什么是Vue.js? Vue.js簡介 Vue.js是一種用于構建用戶界面的前端框架。它是目前非常流行的JavaScript框架之一&#xff0c;被廣泛應用于單頁應用和響應式網頁開發。 Vue.js具有以下特點和優勢&#xff1a; 輕量級&#xff1a; Vue.js的文件體積很小&#xff0c;加載速度快&…

代碼隨想錄--鏈表--反轉鏈表

題目 題意&#xff1a;反轉一個單鏈表。 示例: 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2->1->NULL 思路 如果再定義一個新的鏈表&#xff0c;實現鏈表元素的反轉&#xff0c;其實這是對內存空間的浪費。 其實只需要改變鏈表的next指針的…

GPU學習記一下線程分組相關

在compute的時候&#xff0c;是要dispatch一個數量的代表分了多少塊任務集&#xff0c;dispatch的塊內部也是有一個數量的&#xff0c;那么這些值怎么取的呢 內部&#xff0c;N卡32 外面dispatch的數量就是all/32 然后細說這個值 這有一個叫core的東西&#xff0c;就是相當于th…

嵌入式學習-PWM輸出比較

簡介 PWM技術 輸出比較框圖介紹 定時器部分 比較器控制部分 輸出控制部分 相關寄存器

(5.4–5.10)投融資周報|共38筆公開投融資事件,基礎設施領跑,游戲融資活躍

5月4日至5月10日期間&#xff0c;加密市場共發生38筆投融資事件&#xff0c;其中基礎設施18筆、游戲5 筆、其他4 筆、DeFi 3筆、Depin 3 筆、CeFi 2筆、NFT2筆、 RWA1筆。 本周千萬美金以上融資有5筆&#xff1a; 加密貨幣交易公司Arbelos完成了一輪2800 萬美元的種子輪融資&…