最近在項目中,用戶提出我們需要使用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) } }}…
所以我們只需要根據返回值, 寫登錄的界面邏輯就好了。