5

我有一个 Qt 应用程序,它使用QWebChannel.

在这些视图中,我让 JavaScript 做一些事情,以便根据屏幕大小定位/调整窗口大小。该screen对象应该提供这种信息。(屏幕文档

但在我QWebEnginePage的,屏幕对象在整个加载过程中是空的。

如果我在按钮上放置一个侦听器以到达screen.height页面上的某个位置,那么它现在可以工作了。

//js local file called in html head

//screen = {}
document.addEventListener("load", function(event) {
  //screen = {}
  new QWebChannel(qt.webChannelTransport, function(channel) {
    //screen = {}
    //stuff
    channel.object.myClass.show(function(res){ //Qt function that calls the show() method of the QWebEngineView
      //screen = {}
    });

  });

  document.getElementById("myBtn").addEventListener("click", function(){
    console.log("height:" + screen.height); // screen: 1440
  });
});

所以我的问题是,如何screen在我的 JavaScript 中的某个时间点访问值?

4

1 回答 1

2

我认为在您尝试访问您的screen对象时,它不可用。实际上,您的 HTML 文件将被直接加载,但其他对象,例如 JavaScript 对象/程序或样式表(例如 CSS 文件)将被异步加载。

它在QWebEnginePage的文档中进行了解释:

html 会立即加载;外部对象是异步加载的。

因此,当您的页面未加载时,您无法访问此属性。但是,您可以在页面加载后访问它,就像您实际上在按钮上使用侦听器一样。获取这些属性的另一种方法是Q_INVOKABLE在您的类中定义方法,以便在 C++ 端检索它们(请参阅此答案)。

于 2016-04-20T14:06:22.303 回答