在鼠标滚轮事件上让QWebView
水平滚动而不是垂直滚动的最简单方法是什么。我可以想到以下替代方案,但也许有一些更简单的方法:
- 子类 QWebView 并重新实现
QWebView::wheelEvent()
- 在显示的页面上加载一些 javascript 来进行转换
另一种方法是发送一个带有水平方向的伪造车轮事件。
void HScrollWebView::wheelEvent(QWheelEvent *ev)
{
QWheelEvent weHorizontal( ev->pos(), ev->delta(), ev->buttons(), ev->modifiers(),
Qt::Horizontal );
QWebView::wheelEvent( &weHorizontal );
}
此版本也适用于复杂的网页。例如,带有可滚动子部分的网页不会通过调用滚动正确的区域
page()->currentFrame()->scroll(ev->delta(), 0);
如果 currentFrame() 指向错误的帧(例如大型机)。
在我的问题中,我高估了选项 1. 的复杂性。我现在已经实现了,像这样(省略构造函数):
class HScrollWebView : public QWebView
{
Q_OBJECT
public:
explicit HScrollWebView(QWidget *parent = 0);
protected:
virtual void wheelEvent(QWheelEvent *ev);
};
void HScrollWebView::wheelEvent(QWheelEvent *ev){
page()->currentFrame()->scroll(ev->delta(), 0);
}