1

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 も使用していますが、問題はまだ存在します。

4

1 に答える 1