qtWebKit 内で d3js を使用しようとしています。具体的には、次のテスト ページを作成しました。
<!DOCTYPE html>
<meta charset="utf-8">
<style>
rect.pane {
cursor: move;
pointer-events: all;
}
</style>
<body>
<script type="text/javascript" src="d3.min.js"></script>
<script type="text/javascript">
var margin = {top: 20, right: 60, bottom: 30, left: 20},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
// svg
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var zoom = d3.behavior.zoom()
.on("zoom", draw);
svg.append("rect")
.attr("class", "pane")
.attr("width", width)
.attr("height", height)
.call(zoom);
function draw() {
console.log(d3.event);
}
</script>
この HTML コードの目的は、 https://github.com/mbostock/d3/wiki/Zoom-Behaviorで説明されているように、rect でスクロール イベントを「発生」させ、d3.event オブジェクトからスケール値を取得することです。
この例をクロムにロードすると、コンソールを見ると、オブジェクト d3.event が表示されます。
Object {type: "zoom", scale: 1.0511729090877093, translate: Array[2], sourceEvent: WheelEvent, target: function}
この例を qtWebKit ウィジェットに挿入しました。QMainWindow を使用する:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
view(new QWebView(this))
{
ui->setupUi(this);
setCentralWidget(view);
view->load(QUrl("qrc:/html/test.html"));
QWebFrame *webFrame = view->page()->currentFrame();
webFrame->addToJavaScriptWindowObject(QString("callback"), this);
}
と
Q_INVOKABLE void callbackScrollEvent(QString data);
と
void MainWindow::callbackScrollEvent(QString data)
{
qDebug() << "test" << data;
}
しかし、d3.event オブジェクトは空のようです:
test "[object Object]"
足りないものはありますか?Qt 4.8.4 を使用していますが、Qt 5.0.1 も使用していますが、問題はまだ存在します。