Я пытаюсь использовать d3js внутри qtWebKit. В частности, я создал следующую тестовую страницу:
<!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-кода является прямое «срабатывание» события прокрутки и получение значения масштаба из объекта d3.event, как описано в https://github.com/mbostock/d3/wiki./Zoom-Behavior.
Если я загружу этот пример в chrome, посмотрев на консоль, я увижу объект 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, проблема все еще присутствует.