[英]Reading the return value of a java script function with "evaluateJavaScript" from Qt
如何在 C++ 中获取 JavaScript 函数的返回值?
在很久没有使用 JavaScript 之后,我使用谷歌地图 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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.