次の問題があります: QWebView (Google マップ) のコードにマップ フォーム HTML ファイルを読み込んでいます。この HTML ファイルでは、指定された座標でマップ上のラベル付きマーカーを追加することになっている JavaScript 関数を定義しました。コードは次のとおりです。
JavaScript 関数:
function addLMarker(lat, lng, label) {
var marker = new MarkerWithLabel({
position: new google.maps.LatLng(lat, lng),
draggable: false,
raiseOnDrag: false,
map: map,
labelContent: label,
labelAnchor: new google.maps.Point(0, 0),
labelClass: "labels",
labelStyle: {opacity: 0.75}
});
markers.push(marker);
return true;
}
C++ 関数:
QString SCRIPT_ADDMARKERWITHLABEL = tr("addLMarker(%1, %2, \"%3\")");
void addMarkerWithLabel(QPointF pos, QString label) {
page()->mainFrame()->evaluateJavaScript(SCRIPT_ADDMARKERWITHLABEL.arg(pos.x()).arg(pos.y()).arg(label));
}
アプリケーションから JS 関数が正しく呼び出されていることは確かですが、QWebView フレームには影響しません。ブラウザでこの関数を呼び出すと、正しく実行され、マップ上の指定された位置にマーカーが配置されます。問題はどこだ?何か不足していますか?
編集:
突然機能し始めました。関数コードが (ブラウザで動作しているにもかかわらず) 正しく実行されていないことに気付いたので、DeveloperExtras をオンにして、QWebView で JS で何が起こっているかを調べることができました。これを貼り付けるだけです:QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
メイン ウィンドウのコンストラクターに、javascript コードが機能し始めました。この行を削除した後も、引き続き機能します。私はそれを解決策とは呼びませんが、まあ、何とかうまくいきました。