私の問題に対する決定的な答えを見つけることができませんでした。
現在、QWebView コントロールに、ハード ドライブにある HTML ファイルをロードしてもらい、javascript アクションでベクター マップを実装しています。html ファイルは jvectormap US States Map をロードします。任意の状態のクリック アクションは、showCities 関数に関連付けられた onRegionClick アクションを起動します。このイベントとコード引数は、jquery-jvectormap.js ファイルに実装された onRegionClick メソッドによって処理されます。html ファイルは次のとおりです。
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="styles/style2.css" type="text/css"/>
<link rel="stylesheet" media="all" href="styles/jquery-jvectormap.css"/>
<script src="js/jquery.tools.min.js"></script>
<script src="js/jquery-jvectormap.js"></script>
<script src="js/jquery-jvectormap-us-en.js"></script>
<script>
$(function() {
$('.map').vectorMap({
map: 'us_en',
color: 'green',
hoverColor: 'blue',
onRegionClick: showCities
});
});
function showCities(event, code) {
return code;
}
</script>
</head>
<body>
<div id="front">
<div class="map"></div>
</div>
</body>
</html>
また、Qt の mainwindow.h ヘッダー ファイル情報:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QUrl>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_webView_linkClicked(const QUrl &arg1);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
そして MainWindow.cpp ファイル:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QtGui>
#include <QtCore>
#include <QDebug>
#include <QtWebKit>
#include <QWebSettings>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
ui->webView->settings()->setAttribute(QWebSettings::JavascriptEnabled, true);
connect(ui->webView,SIGNAL(linkClicked(QUrl)),this,SLOT(on_webView_linkClicked(QUrl)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_webView_linkClicked(const QUrl &arg1)
{
QMessageBox::information(this,"Title","Test");
}
特定の領域をクリックしても、on_webView_linkClicked 関数がトリガー/起動されません。クリックされた領域は、文字列を返すように設計されています。http://www.google.comのような Web ページでこれを試すと、 on_WebView_linkClicked 関数の QMessageBox が実際に QMessageBox を表示するイベントをトリガー/起動します。
ここでの目標は、関数 showCities の html ファイルで返された JavaScript 文字列を取得して、on_webView_linkClicked イベントに表示することです。明らかに、linkClicked アクションは JavaScript の戻り値をリンクとして認識していないため、jquery ベクター マップを使用するとサイレントのままになります。
私はこれをどこでも検索しましたが、私が得ることができる唯一の答えは、vectormap 内のそれらの領域に URL リンクが添付されている場合は機能する可能性があるということですが、それらの領域にダミーのリンクを埋め込んでも on_webView_linkClicked イベントが発生しません。
ご協力ありがとうございます:)