xiaoluo2333 2024-05-07 16:28 采纳率: 62.5%
浏览 15
已结题

QT6中的QWebEngineView不能获取高德API内容

尝试利用QT6中的QWebEngineView控件加载高德API显示地图,但是运行后一直报错,直接运行HTML文件却又可以正常打开,请教各位。
下面是遇到的问题

img

下面是高德API的HTML,key删除

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>基本地图展示</title>
    <link rel="stylesheet" href="https://cache.amap.com/lbs/static/main1119.css"/>
    <!--script src="https://cache.amap.com/lbs/static/es5.min.js"></script-->
    <script src="https://webapi.amap.com/maps?v=1.3&key=已删除"></script>
    <script type="text/javascript" src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
</head>
<body>
<div id="container" style="width: 100%; height: 500px;"></div>
 
<script>
    var map = new AMap.Map('container', {
        resizeEnable: true,
        zoom: 11,
        center: [116.397428, 39.90923]
    });
</script>
</body>
</html>


下面是pro文件代码

QT       += core gui webenginewidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

下面是widget.h代码

#ifndef WIDGET_H
#define WIDGET_H
#include <QtWidgets>
#include <QWebEngineView>
#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

下面是widget.cpp代码

#include "widget.h"
#include "ui_widget.h"


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{

    ui->setupUi(this);
    ui->web_widget->page()->setUrl(QUrl::fromLocalFile("D:/QTproject/24050511/html/显示地图1608.html"));
}

Widget::~Widget()
{
    delete ui;
}

下面是main.cpp代码

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{

    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

下面是widget.ui代码

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Widget</class>
 <widget class="QWidget" name="Widget">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Widget</string>
  </property>
  <layout class="QVBoxLayout" name="verticalLayout">
   <item>
    <widget class="QWebEngineView" name="web_widget" native="true"/>
   </item>
  </layout>
 </widget>
 <customwidgets>
  <customwidget>
   <class>QWebEngineView</class>
   <extends>QWidget</extends>
   <header>qwebengineview.h</header>
   <container>1</container>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>
  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-05-08 00:37
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据你提供的代码和描述,问题可能出在加载高德地图API时。在你的代码中,尝试直接加载本地文件,但是高德地图API需要通过网络加载,并且需要有效的 API
    密钥。
    解决这个问题的思路如下:

    1. 使用正确的加载方式 :高德地图 API 需要通过网络加载,而不是直接加载本地文件。因此,你需要修改代码,使其能够通过网络加载地图。
    2. 确保 API 密钥正确 :你在 HTML 代码中使用了一个已删除的 API 密钥。确保你替换为有效的高德地图 API 密钥。
    3. 检查网络连接 :确保你的应用程序能够连接到互联网,以加载高德地图 API。
      以下是你需要修改的部分:
      widget.cpp 文件中,修改加载 URL 的方式,使其能够通过网络加载高德地图 API,同时将有效的 API 密钥填入 URL
      中:
      cpp
      Copy code
      #include "widget.h"
      #include "ui_widget.h"
      Widget::Widget(QWidget *parent) :
      QWidget(parent),
      ui(new Ui::Widget)
      {
      ui->setupUi(this);
      // 修改加载方式为通过网络加载
      ui->web_widget->page()->setUrl(QUrl("https://你的网站/你的html文件"));
      }
      Widget::~Widget()
      {
      delete ui;
      }
      
      另外,确保你的 HTML 文件中的高德地图 API 密钥是有效的,并且确保你的网络连接正常。
      这样,你的程序应该能够正确加载高德地图 API 并显示地图了。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 已采纳回答 5月8日
  • 创建了问题 5月7日

悬赏问题

  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥15 Android Navigation: 某XDirections类不能自动生成
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费