C++與QML邏輯分離

最近在項目中,用戶提出我們需要使用QML開發項目界面,並且不需要我們實現C++底層邏輯,只需要把接口暴露出來供調用。

我嘗試過構想用信號槽機制來實現交互,但是總感覺最後出來的程序會有一大堆的信號和槽函數,很不優雅,並且不易於維護。所以就嘗試用其他方法來實現。

爲了方便大家理解,我寫了一個登錄的Demo,Demo的目錄結構如下:
在這裏插入圖片描述
implements目錄下包含了LoginImplements.js接口定義文件, 這個文件就是我們實現QML界面和C++邏輯分離的關鍵.

可以看到LoginImplements.js提供的接口:

/*登錄函數接口

參數

username: 用戶名

password: 密碼

返回:

成功:空字符串

失敗: 非空字符串, 錯誤描述

*/

function login(username, password)

{

return “登錄函數未實現”

}

這裏只是一個定義,是交由客戶實現的,我們在QML界面中只需要調用接口定義就OK。

#LoginForm.qmlimport “./implements/LoginImplements.js” as LoginImplements…Button { …

onClicked: { //參數檢測 //登錄 var result = LoginImplements.login(user, pwd) if (result.lenth === 0){ emit: root_item.loginSuccess() } else{ emit: root_item.failedToLogin(result) } }}…

所以我們只需要根據返回值, 寫登錄的界面邏輯就好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章