qt quick 串口終端通過c++ 與qml 之間的通信實現串口終端軟件。
qml 實現數據顯示和人機設定界面,需要在c++中實現串口的操作和狀態的更新。
qml中通過把設定界面的是否可見進行設定。可見的時候顯示需要設定的參數 然後點擊apply 按鈕打開串口。
串口的打開需要通過C++ 類中指定了 Q_INVOKABLE 的方法。並在主程序中設定了QtQuick2ApplicationViewer的 rootContextsetContextProperty
程序如下:
//設定串口對象SerialTest 在qml中可見,名稱爲serialtest
viewer.rootContext()->setContextProperty("serialtest",new SerialTest);
//類中方法聲明,可以可以在qml中訪問
Q_INVOKABLE void openAndSetPort(int PortNameIndex,int BaudRateIndex,int DatabitsIndex,int ParityIndex,int StopbitsIndex,int FlowcontrolIndex);//打開並設定端口;
同時qml中顯示接受到的數據和發送的數據統計,這是訪問C++類的私有成員,需要通過設定Q_PROPERITY 聲明如何訪問。
Q_PROPERTY(QString receivenumber READ receivenumber WRITE setreceivenumber NOTIFY receivenumberChanged)//接收的數據字節統計
void SerialTest::setreceivenumber(QString receivenumber)//更新接收的數據字節總數
{
m_receivenumber=receivenumber;
emit receivenumberChanged();;
}
QString SerialTest::receivenumber()//響應receivenumberChanged()消息
{
return m_receivenumber;
}
其實qml寫這個數據倒是不用多討論,數據更新到界面的時候其實是發送一個信號,qml 中顯示數據會跟隨着數據的更新動態加載。
Label{
height: 25
text: "Number of receive Data: "+serialtest.receivenumber//顯示接收數據計數
verticalAlignment :Text.AlignVCenter
}