我正在尝试在 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 代码的目的是让 rect “触发”滚动事件并从 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,问题仍然存在。