結局、それほど難しくはありませんでした。
まず、ウィンドウをJavaScriptエンジンに公開しました。
this->webView()->page()->mainFrame()->addToJavaScriptWindowObject("CHtml5ApplicationViewer", this);
次に、HTMLコード内に単純なdivを作成し、このコードを添付して、マウスのonClick、onMove、およびonDragイベントを処理しました。
document.getElementById("bar").onmousedown = function(e){
CHtml5ApplicationViewer.fakeMousePressEvent(e.pageX, e.pageY);
e.preventDefault();
document.onmousemove = function(e){
CHtml5ApplicationViewer.fakeMouseMoveEvent(e.screenX, e.screenY);
e.preventDefault();
}
this.onmouseup = function(){
document.onmousemove = null;
}
document.getElementById("bar").ondragstart = function() { return false; }
}
最後に、JavaScriptコードからの呼び出しを処理する2つの関数をC++コードに追加しました。
void CHtml5ApplicationViewer::fakeMousePressEvent(int fromBorderX, int fromBorderY){
fromBorderPosition = QPoint(fromBorderX, fromBorderY);
}
void CHtml5ApplicationViewer::fakeMouseMoveEvent(int dragX, int dragY){
move(QPoint(dragX, dragY) - fromBorderPosition);
}
また、これらの関数をJSから呼び出し可能にするようにしてください。
public:
Q_INVOKABLE void fakeMousePressEvent(int fromBorderX, int fromBorderY);
Q_INVOKABLE void fakeMouseMoveEvent(int dragX, int dragY);