gpt4 book ai didi

javascript - 从 Qt 中读取带有 "evaluateJavaScript"的 javascript 函数的返回值

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:16 25 4
gpt4 key购买 nike

This is my route planner widget implemented with Qt5 and WebKit

如何在 C++ 中获取 JavaScript 函数的返回值?

在很长一段时间使用 JavaScript 之后,我使用 Google map API V3 实现了一个路线规划器。我定义了一些函数来通过 Qt 的 WebKit 函数访问它的脚本部分:evaluateJavaScript()。现在困难的部分是,获取标记的位置数据(见图,标记为红色)。在 JavaScript 端,我只返回一个数组。我如何读取 Qt 端的“latlng”数组?

插图 - 这是我想要简化的:

// JavaScript
function getJSFoo() {
return foofoo;
}
// C++
void readInQt() {
// something like this:
float val = evaluateJavaScript("getJSFoo()");
// Do stuff
}

提前致谢!

这是我的代码,或多或少是我如何使用它的。在 JavaScript 的结尾:

// Add a marker to the map and push to the array.
function addMarker(location) {
var marker = new google.maps.Marker({
position: location,
map: map,
draggable:true
});

var LatLng = marker.getPosition();
var sLatLng = "Latitude: " + marker.getPosition().lat().toString() +
"\nLongitude: " + marker.getPosition().lng().toString();
marker.setTitle(sLatLng);

flightMarker.push(marker);
return flightMarker;
}

function getMarkers() {
var latlng = []
for (var i = 0; i < flightMarker.length; i++) {
latlng.push(flightMarker[i].getPosition() );
}
return latlng;
}

在 Qt 的结尾:

void sl_submitRoute() {
getWaypoints();
}

QList<float> getWaypoints() {
QList<float> lWaypoints;
// I don't know what I do here :D
QVariant varMarkers = mView->page()->mainFrame()->evaluateJavaScript(QString("getMarkers();") );
QList <QVariant> allListObj = varMarkers.toList();
qDebug() << allListObj;

return lWaypoints;
}

最佳答案

我找到了解决方案。最简单的方法是将数据转换为 QStringList 并返回。否则数据类型转换可能导致泄漏。

JavaScript

function getMarkers() {
var latlng = []
for (var i = 0; i < flightMarker.length; i++) {
var sPos = flightMarker[i].getPosition().lat().toString() + ":" + flightMarker[i].getPosition().lng().toString();
latlng.push(sPos);
}
return latlng;
}

Qt

// Returns a list of points: Latitude & Longitude
RouteF getWaypoints() {
RouteF lWaypoints;

QVariant varMarkers = mView->page()->mainFrame()->evaluateJavaScript(QString("getMarkers();") );
QList<QVariant> allListObj = varMarkers.toList();
for(int i = 0; i < allListObj.size(); i++) {
QStringList lPoint = allListObj.at(i).toString().split(':');
if(lPoint.size() != 2) {
qDebug() << "Warning: Waypoint not valid!";
continue;
}

double fLat = lPoint.at(0).toDouble();
double fLon = lPoint.at(1).toDouble();
PointF waypoint = PointF(fLat, fLon);
lWaypoints.push_back(waypoint);
qDebug() << "Added point: " << fLat << ":" << fLon;
}

return lWaypoints;
}

关于javascript - 从 Qt 中读取带有 "evaluateJavaScript"的 javascript 函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23018294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com