我正在使用带有 HTML 的 c++ 应用程序。
使用 webkit,我们可以从 c++ 对象同步调用 c++ API。javascript中的逻辑很清楚。
但是对于 WebChannel,来自 c++ 对象的每个 API 调用都是异步的。如果我们从异步调用中获得一个对象-B 作为返回值,那么来自对象-B 的 API 调用也是异步的。这不仅大大增加了代码复杂度,而且逻辑也难以维护。
考虑这段代码:
new QWebChannel(qt.webChannelTransport, function (Channel) {
var jsObject = Channel.objects.external;
jsObject.RegisterClient("clientname", 0, function(Handle) {
jsObject.ConfigureClient(Handle, function (clientObject) {
clientObject.getItems(function (items) {
for (int i = 0; i < items.size(); i++)
{
items[i].calculateValue1(function (value) {
**// update value. Here value of 'i' will be out of over 'item.size()'.**
items[i].calculateValue2(function (value) {
// update value
});
});
}
});
}); // this is asynchronous
});
首先,从 webkit 迁移现有代码将会有太多的工作。其次,如粗体突出显示的那样,for 循环被破坏了。
有替代解决方案吗?QT5.15及以上版本除了webchannel还有什么可以用的吗?