網站首頁 編程語言 正文
我所使用的方式,是通過C++調用遠端的webservice,再次數據送到qml端,不說原理了,直接上代碼的實現過程。需要明白一點: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_H
cpp:
#include "test.h"
test::test(QObject *parent) : QObject(parent)
{
}
以上文件中,最重要的兩點:繼承自QObject以及包含Q_OBJECT均完成。
定義屬性時,需要寫在Q_OBJECT下面,沒有分號,可以使用快捷鍵對相關的代碼進行自動生成,演示一個字段屬性,完成后的代碼如下,字段名為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
在自動生成數據時,最好先寫入一個private節,這個自動生成的時候沒有,定義后,使用的私有變量會放在這里,否則會跟在public slots下,反正是最下面了。
二、數據操作類
數據操作類的生成方法與上步類似,不同的是需要定義操作的方法,以返回數據的為數據集為例,在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中供調用,貌似有兩種方式,我使用的是setContextProperty。在main中,connect前:
engine.rootContext()->setContextProperty("c_test", new c_test);
經測試,在1中所定義的類,不需要注冊。
四、qml調用
將值給ListMode時,需要進行一次迭代。
var data = c_test.getData()
_model.clear()
for(var i=0;i<data.length;i++){
_model.append(data[i]);
}
如上代碼中的c_test.getData()就是使用注冊的類進行的操作。
此處迭代是必須的,不能直接給model。
在qml中顯示:
Text{
?? ?text: name
?? ?}
這里所使用的name,就是在一的類里所定義的屬性。
這個一直做為攔路虎的東西,在實現后發現也并不是很麻煩。以上方式測試通過,熟練了一種之后,如果需要可以再看其它,應該就簡單了吧。
原文鏈接:https://blog.csdn.net/wjhx/article/details/126708542
相關推薦
- 2022-04-22 SketchUp:解決鏡頭剪切屏幕出現破面視角的問題圖文教程
- 2022-05-10 Element-ui 中 Table 表格的設置表頭/去除下標線/設置行間距等屬性的使用及 slot
- 2022-04-06 關于Redis數據庫三種持久化方案介紹_Redis
- 2022-07-20 輕松手寫Spring的IOC
- 2022-08-08 pd.to_datetime中時間object轉換datetime實例_python
- 2022-04-29 DataTable的AcceptChanges()和RejectChanges()方法介紹并實現Da
- 2022-12-11 Dart多個future隊列完成加入順序關系及原子性論證_Dart
- 2022-11-11 react中代碼塊輸出,代碼高亮顯示,帶行號,能復制的問題_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支