操作如下
① 首先定义好自己的类
② 定义C++处信号
signals:
void updatePointValue(double point1Value,
double point2Value,
double point3Value);
③ 在QML中将C++的信号绑定到函数
function setPoint(point1Value, point2Value, point3Value)
{
// console.log("[Info]--enter the setPoint() function\r\n");
var f1 = [];
var f2 = [];
var f3 = [];
f1[0] = point1Value;
f2[0] = point2Value;
f3[0] = point3Value;
idWaveChart1.addData(f1);
idWaveChart2.addData(f2);
idWaveChart3.addData(f3);
}
Component.onCompleted: {
ControlsInitializer.initQuickRoot(idRoot)
ControlsInitializer.initTheme("qrc:/themes", "normal")
console.log("主题列表 == " + JSON.stringify(ThemeController.themeList)
+ "\n" + "当前主题 == " + ThemeController.appTheme)
idSerialport.updatePointValue.connect(idContentRoot.setPoint);
}
④ 当需要将C++的数据发送到QML时,通过emit发出信号即可,信号可以带参数,也可以不带参数
void SerialPort::setNewData()
{
bool bGetPoint = false;
uint32_t uiDataLength = 0;
double pdPointValue[3] = {0};
uint8_t *pucWaveData = nullptr;
m_newSerialHexData = m_serial->readAll();
bGetPoint = serialFormatData->WaveDataProcess(m_newSerialHexData,
&pucWaveData, &uiDataLength);
if(bGetPoint)
{
serialFormatData->GetPointValue(pucWaveData, pdPointValue);
emit updatePointValue(pdPointValue[0], pdPointValue[1], pdPointValue[2]);
}
setDataString(m_newSerialHexData.toHex() + "\r\n");
}