C++與QML進(jìn)行數(shù)據(jù)交互實現(xiàn)方式介紹
我所使用的方式,是通過C++調(diào)用遠(yuǎn)端的webservice,再次數(shù)據(jù)送到qml端,不說原理了,直接上代碼的實現(xiàn)過程。需要明白一點:qml不接受QList的類方式,所以使用了QList<QObject*>。大致分為四步,按需要看:
一、定義可交互的類
可以IDE生成中選擇基類為QObject完成即可,基本代碼自動生成。

h:
#ifndef TEST_H
#define TEST_H
#include <QObject>
class test : public QObject
{
Q_OBJECT
public:
explicit test(QObject *parent = nullptr);
signals:
public slots:
};
#endif // TEST_Hcpp:
#include "test.h"
test::test(QObject *parent) : QObject(parent)
{
}
以上文件中,最重要的兩點:繼承自QObject以及包含Q_OBJECT均完成。
定義屬性時,需要寫在Q_OBJECT下面,沒有分號,可以使用快捷鍵對相關(guān)的代碼進(jìn)行自動生成,演示一個字段屬性,完成后的代碼如下,字段名為name:

#ifndef TEST_H
#define TEST_H
#include <QObject>
class test : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName)
public:
explicit test(QObject *parent = nullptr);
QString name() const
{
return m_name;
}
signals:
public slots:
void setName(QString name)
{
m_name = name;
}
private:
QString m_name;
};
#endif // TEST_H在自動生成數(shù)據(jù)時,最好先寫入一個private節(jié),這個自動生成的時候沒有,定義后,使用的私有變量會放在這里,否則會跟在public slots下,反正是最下面了。
二、數(shù)據(jù)操作類
數(shù)據(jù)操作類的生成方法與上步類似,不同的是需要定義操作的方法,以返回數(shù)據(jù)的為數(shù)據(jù)集為例,在public中定義一個方法,類名定義為c_test:
Q_INVOKABLE QList<QObject*> getData() const;
如果返回的只是一個單值,則這樣:
Q_INVOKABLE QString getData() const;
賦值:
QList<QObject*> c_test::getData() const
{
QList<QObject*> r_list;
...
test *t1 = new test;
t1.setName("...");
r_list.append(t1);
...
return r_list;
}
三、注冊
注冊是指將C++的類注冊到qml中供調(diào)用,貌似有兩種方式,我使用的是setContextProperty。在main中,connect前:
engine.rootContext()->setContextProperty("c_test", new c_test);經(jīng)測試,在1中所定義的類,不需要注冊。
四、qml調(diào)用
將值給ListMode時,需要進(jìn)行一次迭代。
var data = c_test.getData()
_model.clear()
for(var i=0;i<data.length;i++){
_model.append(data[i]);
}
如上代碼中的c_test.getData()就是使用注冊的類進(jìn)行的操作。
此處迭代是必須的,不能直接給model。
在qml中顯示:
Text{
text: name
}
這里所使用的name,就是在一的類里所定義的屬性。
這個一直做為攔路虎的東西,在實現(xiàn)后發(fā)現(xiàn)也并不是很麻煩。以上方式測試通過,熟練了一種之后,如果需要可以再看其它,應(yīng)該就簡單了吧。
到此這篇關(guān)于C++與QML進(jìn)行數(shù)據(jù)交互實現(xiàn)方式介紹的文章就介紹到這了,更多相關(guān)C++與QML數(shù)據(jù)交互內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳談C++何時需要定義賦值/復(fù)制構(gòu)造函數(shù)
下面小編就為大家?guī)硪黄斦凜++何時需要定義賦值/復(fù)制構(gòu)造函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01
C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與)
這篇文章主要介紹了C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
利用Qt實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)報文大小端數(shù)據(jù)的收發(fā)
大小端(Endianness)是計算機體系結(jié)構(gòu)的一個術(shù)語,它描述了多字節(jié)數(shù)據(jù)在內(nèi)存中的存儲順序,下面我們來看看如何利用Qt實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)報文大小端數(shù)據(jù)的收發(fā)吧2024-11-11
C語言容易被忽視的函數(shù)設(shè)計原則基礎(chǔ)
C語言的設(shè)計目標(biāo)是提供一種能以簡易的方式編譯、處理低級存儲器、產(chǎn)生少量的機器碼以及不需要任何運行環(huán)境支持便能運行的編程語言.那么C語言函數(shù)設(shè)計的一般原則和技巧都是怎樣的呢,下面帶你了解2022-04-04

