Qml 調用 c++ 函數
1 定義C++ 類 如 QMyModel 繼承於 QObject
2 Qml 上下文 使實例變爲gMyModel 屬性 MyModel
QQmlContext *ctxt = ui.quickWidget->rootContext();
ctxt->setContextProperty("MyModel", gMyModel);
3 定義C++類函數
Q_INVOKABLE 將此宏應用於成員函數的聲明,以允許通過元對象系統調用它們
Q_INVOKABLE QVariantMap QMyModel::getCurrentInfo(int i)
{
QList<QString> keysList = elementMap.keys();
if (keysList.isEmpty())
{
//return nullptr;
}
QString key = keysList[i];
QMyElement element = elementMap[key];
QVariantMap map;
map.clear();
map.insert("deviceID", element.deviceID);
map.insert("donorID", element.donorID);
map.insert("donorName", element.donorName);
map.insert("ipAddress", element.ipAddress);
map.insert("ipPort", element.ipPort);
map.insert("protocol", element.protocol);
map.insert("drawPlasmaVolume", element.drawPlasmaVolume);
map.insert("cycles", element.cycles);
map.insert("drawPumpSpeed", element.drawPumpSpeed);
map.insert("returnPumpSpeed", element.returnPumpSpeed);
map.insert("cuffPressure", element.cuffPressure);
map.insert("totalSalineVolume", element.totalSalineVolume);
map.insert("dpmMaxPressure", element.dpmMaxPressure);
map.insert("dpmMinPressure", element.dpmMinPressure);
map.insert("bloodVolume", element.bloodVolume);
map.insert("thePlasmaVolume", element.thePlasmaVolume);
map.insert("theSalineVolume", element.theSalineVolume);
return map;
}
4 調用 getCurrentInfo
function setCurrentItem()
{
var curInfo = MyModel.getCurrentInfo(gridView.currentIndex);
deviceID = curInfo.deviceID
donorID = curInfo.donorID
donorName = curInfo.donorName
ipAddress = curInfo.ipAddress
ipPort = curInfo.ipPort
protocol = curInfo.protocol
drawPlasmaVolume = curInfo.drawPlasmaVolume
cycles = curInfo.cycles
drawPumpSpeed = curInfo.drawPumpSpeed
returnPumpSpeed = curInfo.returnPumpSpeed
cuffPressure = curInfo.cuffPressure
totalSalineVolume = curInfo.totalSalineVolume
dpmMaxPressure = curInfo.dpmMaxPressure
dpmMinPressure = curInfo.dpmMinPressure
bloodVolume = curInfo.bloodVolume
thePlasmaVolume = curInfo.thePlasmaVolume
theSalineVolume = curInfo.theSalineVolume
}
c++ 調用 Qml函數
1 首先獲取 節點元素
QQuickItem *root = ui.quickWidget->rootObject();
2 調用 根節點元素方法
QMetaObject::invokeMethod(root, "changeColor");
3 獲取其他元素
QObject *item = root->findChild<QObject*>("moban");
Rectangle{
objectName: "moban"
}
注意這裏用的是 objectName 而非 id