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
}