针对QT与JavaScript交互时用runJavaScript调用函数却显示函数未定义的解决方法

最近一段时间在弄一个大作业,要调用地图的api,导致要JavaScript与QT交互,因为不能与JavaScript就拖了很久,今天晚上又找了很久,终于是哪里的问题了。
开始以为是QT里写的有问题,但其实没问题,函数如下:
user.h

#ifndef USER_H
#define USER_H
#include <QWidget>
#include <QWebEngineProfile>
#include <QWebEngineView>
#include <QWebChannel>
#include <QJSEngine>
#include <QMainWindow>

namespace Ui {
class user;
}

class user : public QMainWindow
{
    Q_OBJECT

public:
    explicit user(QWidget *parent = nullptr);
    ~user();
    QWebEngineView *webview = nullptr;
    QWebChannel *channel = nullptr;
    void test();
private:
    Ui::user *ui;
};

user.cpp

#include "user.h"
#include "ui_user.h"
#include<QVBoxLayout>
user::user(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::user)
{
    ui->setupUi(this);
    webview = new QWebEngineView(this);
    channel = new QWebChannel(this);
    channel->registerObject(QString("webobj"), this);   //  QWebChannel对Widget类,注册一个webobj的通信介质 /   webobj需要和js内的保持一致
    webview->page()->setWebChannel(channel);
    webview->setUrl(QUrl("file:///D:/QTcode/gis/lineshow.html"));
    webview->resize(400,400);
    webview->show();

    connect(webview, &QWebEngineView::loadFinished, this, &user::test);
}

user::~user()
{
    delete ui;
}
void user::test(){
    webview->page()->runJavaScript(QString("a(%1,%2,%3,%4)").arg("106.233").arg("29.6123").arg("106.293").arg("29.6073"));  //这个是调用js中的function
}

其实是HTML里JavaScript部分代码的问题,这里是已经改好的代码,不过百度地图的ak被删掉了,如果要使用的,取申请一个填进去就行了。问题:如果要调用JavaScript的函数,JavaScript的函数要在head-head之间才能被调用,在body之间我不知道为什么不行,我JavaScript也是这段时间做大作业才开始接触,不知道原理浪费了我好多天时间,如果还要更新等得我熬过期末这段时间了。

<!DOCTYPE html>
<html>
<head>
	<script src="qwebchannel.js"></script>
	<script type="text/javascript" src="http://api.map.baidu.com/getscript?v=3.0&ak="></script>
	<style type="text/css">
		html,body{
			width:100%;
			height:100%;
			margin:0;
			overflow:hidden;
			font-family:"微软雅黑";
		}
	</style>
	<div style="width:100%;height:100%;border:1px solid gray" id="map"></div>
	<script type="text/javascript">
		// 百度地图API功能
		var map = new BMap.Map("map");
		map.centerAndZoom("重庆", 12);
		map.enableScrollWheelZoom();
		new QWebChannel(qt.webChannelTransport,
		function(channel){
			 bridge= channel.objects.person;	
	function mar(x,y){//标记点
		var marke=new BMap.Marker(new BMap.Point(106.33,29.35));
		map.addOverlay(marke);
	}
	function sou(x1,y1,x2,y2){
		
			var point1=new BMap.Point(x1,y1),
			point2=new BMap.Point(x2,y2);
		var points = [point1,point2];
		show(points);
	}
	function a(x1,y1,x2,y2){
			alert("x1,y1,x2,y2");
		}
	});	
	function mar(x,y){//标记点
		var marke=new BMap.Marker(new BMap.Point(106.33,29.35));
		map.addOverlay(marke);
	}
	function sou(x1,y1,x2,y2){//把两个点连线
		
			var point1=new BMap.Point(x1,y1),
			point2=new BMap.Point(x2,y2);
		var points = [point1,point2];
		show(points);
	}
	function a(x1,y1,x2,y2){
			sou(x1,y1,x2,y2);
		}
	function show(points){
		var curve = new BMap.Polyline(points, {strokeColor:"#00b3ff",strokeWeight:2, strokeOpacity:1}); //创建直线对象
		map.addOverlay(curve);}//添加到地图中
	</script>
</head>
<body>
</body>
</html>

最后唠嗑一句,如果还有其他的解决方法也欢迎补充。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Qt是一款跨平台的C++图形用户界面应用程序开发框架,能够轻松开发高质量的跨平台应用程序。而百度地图是目前国内最流行的Web地图服务,为开发者提供了非常便捷的地图展示、位置检索、路线规划等能力。在Qt中使用百度地图,并能够与js交互,可以大大拓宽了应用的功能。 我们可以使用Qt Quick的WebView来实现百度地图的加载,同时也能够在WebView中嵌入JavaScript代码,实现和地图的互动。在Qt Quick中,可以使用QtWebView模块的WebEngineView或WebEngineViewExperimental类型的对象加载Web页面,并进行动态链接库的调用,从而实现与JavaScript交互。 具体步骤如下: 1. 首先,在Qt Creator中创建一个Qt Quick项目,并在QML文件中加入一个WebView组件,用于加载百度地图。 2. 在C++代码中调用WebEngineView或WebEngineViewExperimental类型的对象,通过setUrl()方法加载百度地图的URL。 3. 通过WebView对象的runJavaScript()方法,在QML文件中嵌入JavaScript代码,并获取、设置百度地图中的特定属性或事件。 例如,我们可以在JavaScript中调用百度地图的JavaScript API,获取当前地图的中心点、缩放级别、添加标记、绘制图形等动作,从而实现和地图的交互。 总之,Qt的WebEngineView提供了非常便捷的方法来在Qt应用中加载Web页面,并与JavaScript进行交互,因此,我们可以使用它轻松地实现与百度地图的交互,为我们的应用程序增加更多的功能和乐趣。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伊始不觉

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值