QML與python之間的通信
使用python+QML制作軟件界面時(shí),python與QML之間的互通是一個(gè)問題,通常使用的不外乎兩種方式:1.python響應(yīng)QML信號(hào);2.QML響應(yīng)python信號(hào)
對(duì)于1,一般使用的是在QML里直接調(diào)用python函數(shù);對(duì)于2,一般是python發(fā)出信號(hào),QML接收信號(hào)并處理。
鑒于網(wǎng)絡(luò)上的資料比較少且良莠不齊,在此整理分享以便于查閱。
1 QML調(diào)用python函數(shù)
關(guān)鍵步驟:python函數(shù)使用Slot修飾符;實(shí)例化類并添加到QML文件上下文;QML文件中根據(jù)自己定義的名字調(diào)用該函數(shù)。
python文件
qml文件
2 python發(fā)信號(hào),QML接收并處理
關(guān)鍵步驟:類里面定義信號(hào) (在init方法外面);QML中使用Connections綁定python的類與信號(hào)的槽函數(shù)(這里QML會(huì)提示警告,但是用他建議的方法寫就跑不通了,不管他了,就這樣吧)
python文件
qml文件
其實(shí)平常一般用第一種方法就夠了,但是在需要開多線程的時(shí)候,可能要在某個(gè)線程工作完成之后通知主線程。開個(gè)計(jì)時(shí)器一直查詢?cè)摼€程是否結(jié)束固然可以,但是太浪費(fèi)資源,這時(shí)第二種方法就派上用場(chǎng)了,子線程完成后可以發(fā)送信號(hào)通知主線程任務(wù)結(jié)束,進(jìn)而執(zhí)行后續(xù)工作。