-1

我正在使用带有 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还有什么可以用的吗?

4

1 回答 1

0

联系了 QT 支持,不幸的是,这个问题没有解决方案。对 webchannel 的所有 c++ API 调用都在另一个进程中处理,因此不可能像 webkit 那样同步。

于 2021-06-03T11:12:21.343 回答