柚子快報(bào)激活碼778899分享:QT:QML與C++交互
柚子快報(bào)激活碼778899分享:QT:QML與C++交互
目錄
一.介紹
二.pro文件添加模塊
三.h文件
四.cpp文件
五.注冊(cè)
六.調(diào)用
七.展示效果
八.代碼
1.qmlandc.h
2.qmlandc.cpp
3.main.cpp
4.qml
一.介紹
在 Qt 中,QML 與 C++ 交互是非常重要的,因?yàn)樗试S開(kāi)發(fā)人員充分利用 QML 和 C++ 各自的優(yōu)勢(shì),實(shí)現(xiàn)更加靈活和高效的應(yīng)用程序開(kāi)發(fā)。
QML 是一種聲明性的語(yǔ)言,用于構(gòu)建用戶界面,具有直觀、簡(jiǎn)潔和易于理解的特點(diǎn),適合用于描述界面的外觀和交互邏輯。而 C++ 是一種強(qiáng)大的編程語(yǔ)言,可以進(jìn)行復(fù)雜的計(jì)算和處理邏輯,適合用于實(shí)現(xiàn)底層功能和業(yè)務(wù)邏輯。
通過(guò) QML 與 C++ 的交互,可以實(shí)現(xiàn)以下作用和重要性:
1.性能優(yōu)化:C++ 可以處理復(fù)雜的計(jì)算和邏輯,可以提高應(yīng)用程序的性能。通過(guò)將一些計(jì)算密集型的任務(wù)交給 C++ 處理,可以提高應(yīng)用程序的響應(yīng)速度和性能表現(xiàn)。
2.業(yè)務(wù)邏輯處理:C++ 可以處理底層的業(yè)務(wù)邏輯,如數(shù)據(jù)處理、文件操作、網(wǎng)絡(luò)通信等。QML 可以專注于界面的呈現(xiàn)和交互邏輯,而將復(fù)雜的業(yè)務(wù)邏輯交給 C++ 處理,可以更好地分離界面和業(yè)務(wù)邏輯,提高代碼的可維護(hù)性和可重用性。
3.跨平臺(tái)開(kāi)發(fā):Qt 支持跨平臺(tái)開(kāi)發(fā),通過(guò) QML 與 C++ 的交互,可以實(shí)現(xiàn)跨平臺(tái)的應(yīng)用程序開(kāi)發(fā)。開(kāi)發(fā)人員可以在 QML 中描述界面,同時(shí)在 C++ 中處理平臺(tái)相關(guān)的邏輯,從而實(shí)現(xiàn)跨平臺(tái)的應(yīng)用程序開(kāi)發(fā)。
4.靈活性和可擴(kuò)展性:通過(guò) QML 與 C++ 的交互,可以實(shí)現(xiàn)界面與邏輯的分離,使得應(yīng)用程序結(jié)構(gòu)更加清晰和靈活。開(kāi)發(fā)人員可以根據(jù)需求選擇在 QML 中實(shí)現(xiàn)界面邏輯,或者在 C++ 中實(shí)現(xiàn)復(fù)雜的邏輯,從而實(shí)現(xiàn)更加靈活和可擴(kuò)展的應(yīng)用程序。
總的來(lái)說(shuō),QML 與 C++ 交互的作用和重要性在于充分發(fā)揮各自的優(yōu)勢(shì),實(shí)現(xiàn)界面與邏輯的分離,提高應(yīng)用程序的性能、可維護(hù)性和可擴(kuò)展性,從而更好地滿足復(fù)雜應(yīng)用程序的開(kāi)發(fā)需求。
二.pro文件添加模塊
.qml模塊
三.h文件
1.首先,繼承自?QObject?類,是 Qt 框架中所有 QML 對(duì)象的基類。
2.其次,定義了一個(gè)?Q_PROPERTY?宏,用于在 QML 中聲明此類的屬性,并提供?READ、WRITE?和?NOTIFY?三個(gè)選項(xiàng)。這里定義了一個(gè)名為?name?的屬性,可以在 QML 中通過(guò)?name?訪問(wèn),通過(guò)?getname?函數(shù)獲取屬性值,通過(guò)?setName?函數(shù)設(shè)置屬性值,并通過(guò)?NameChangedSig?信號(hào)通知 QML 端屬性值的改變。
3.接下來(lái),構(gòu)造函數(shù)?qmlandc(),可以在此處進(jìn)行一些初始化工作。
4.然后,定義了一個(gè)?setName?函數(shù),用于在 C++ 端設(shè)置?name?屬性的值,并在函數(shù)末尾通過(guò)?NameChangedSig?信號(hào)通知 QML 端屬性值的改變。
5.接下來(lái),定義了一個(gè)?getname?函數(shù),用于在 C++ 端獲取?name?屬性的值。
6.最后,定義了一個(gè)?NameChangedSig?信號(hào),用于在 C++ 端通知 QML 端?name?屬性值的改變。
四.cpp文件
1.首先,構(gòu)造函數(shù)?qmlandc()?將?m_name?屬性初始化為字符串 "美女"。
2.然后,setName?函數(shù)用于設(shè)置?m_name?屬性的值。如果傳入的?name?參數(shù)與當(dāng)前?m_name?屬性的值相同,則直接返回,不進(jìn)行任何操作。否則,將?m_name?屬性的值設(shè)置為傳入的?name?參數(shù),并通過(guò)?qDebug()?函數(shù)輸出當(dāng)前?m_name?屬性的值,最后通過(guò)?emit?關(guān)鍵字觸發(fā)?NameChangedSig?信號(hào)。
3.最后,getname?函數(shù)用于獲取?m_name?屬性的值,并將其作為?QString?類型的返回值返回。
五.注冊(cè)
六.調(diào)用
七.展示效果
初始值調(diào)用c++中g(shù)etname顯示為:美女,
點(diǎn)擊矩形框調(diào)用c++中setname為:帥哥。
八.代碼
1.qmlandc.h
#ifndef QMLANDC_H
#define QMLANDC_H
#include
#include
class qmlandc : public QObject
{
Q_OBJECT
Q_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"< emit NameChangedSig(); } QString qmlandc::getname() { return m_name; } 3.main.cpp #include #include #include #include "qmlandc.h" int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); //qmlRegisterType注冊(cè)c++類型至qml //arg1:import時(shí)模塊名 //arg2:主版本號(hào) //arg3:次版本號(hào) //arg4:qml類型名 qmlRegisterType 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.4 Window { visible: true width: 400 height: 400 Qmlqmlandc{ id:_Qmlqmlandc } Rectangle{ anchors.fill: parent Rectangle{ width: 50 height: 50 border.width: 1 border.color: "black" MouseArea{ anchors.fill: parent onClicked: { _Qmlqmlandc.name = "帥哥" } } } Text { anchors.right: parent.right anchors.rightMargin: 100 font.pixelSize: 30 text: _Qmlqmlandc.name } } } 柚子快報(bào)激活碼778899分享:QT:QML與C++交互 好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。