首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QWebEngineView不加载Openlayers

QWebEngineView不加载Openlayers
EN

Stack Overflow用户
提问于 2021-06-17 17:07:21
回答 1查看 169关注 0票数 0

我试着用QWebEngineView和Open层做一个基本的例子,但是它不起作用。

我的脚步:

  1. I从

中用HTML创建了一个基本示例

代码语言:javascript
复制
<!doctype html>
<html lang="en">
  <head>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.5.0/css/ol.css" type="text/css">
    <style>
      .map {
        height: 400px;
        width: 100%;
      }
    </style>
    <script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.5.0/build/ol.js"></script>
    <title>OpenLayers example</title>
  </head>
  <body>
    <h2>My Map</h2>
    <div id="map" class="map"></div>
    <script type="text/javascript">
      var map = new ol.Map({
        target: 'map',
        layers: [
          new ol.layer.Tile({
            source: new ol.source.OSM()
          })
        ],
        view: new ol.View({
          center: ol.proj.fromLonLat([37.41, 8.82]),
          zoom: 4
        })
      });
    </script>
  </body>
</html>

这适用于Chrome。我用支持文件的webenginewidget在QT中创建了一个新项目。在MainWindow中,我放置了以下代码:

代码语言:javascript
复制
    QWebEngineView *view = new QWebEngineView(parent);
    view->page()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true);
    view->page()->settings()->setAttribute(QWebEngineSettings::AutoLoadImages, true);
    view->page()->settings()->setAttribute(QWebEngineSettings::AllowGeolocationOnInsecureOrigins, true);
    view->page()->settings()->setAttribute(QWebEngineSettings::AllowRunningInsecureContent, true);
    view->page()->settings()->setAttribute(QWebEngineSettings::AllowWindowActivationFromJavaScript, true);
    view->load(QUrl::fromLocalFile("C:/TEST/test_webeng/openlayers.html"));
    view->show();

我试图放置所有这些属性,因为没有这些属性,我就会得到这种类型的消息:访问原始文件“https://a.tile.openstreetmap.org/4/10/8.png”中的图像://已被CORS策略阻止:请求的资源上不存在“访问-控制-允许-原产地”标题。",资料来源: file: // C: /TEST/test_webeng/openlayers.html

无论是否有属性,都不会显示地图图像。

有解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-17 18:09:01

问题类似于this post中的问题,但是使用了openstreetmap而不是openstreetmap,因此解决方案是创建一个注入接受语言头的QWebEngineUrlRequestInterceptor。

代码语言:javascript
复制
class Interceptor: public QWebEngineUrlRequestInterceptor{
public:
    using QWebEngineUrlRequestInterceptor::QWebEngineUrlRequestInterceptor;
    void interceptRequest(QWebEngineUrlRequestInfo & info){
        info.setHttpHeader("Accept-Language", "en-US,en;q=0.9,es;q=0.8,de;q=0.7");
    }
};
代码语言:javascript
复制
Interceptor *interceptor = new Interceptor(view);
view->page()->profile()->setUrlRequestInterceptor(interceptor);
view->load(QUrl::fromLocalFile("C:/TEST/test_webeng/openlayers.html"));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68023758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档