让`QWebView`在鼠标滚轮上水平滚动

时间:2012-05-23 13:36:14

标签: qt qwebview

在鼠标滚轮事件中让QWebView水平滚动而不是垂直滚动的最简单方法是什么。我可以想到以下替代方案,但也许有一些更简单的方法:

  1. 子类QWebView并重新实现QWebView::wheelEvent()
  2. 在显示转换的页面上加载一些javascript

2 个答案:

答案 0 :(得分:1)

另一种方法是发送方向为水平的假轮子事件。

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 :(得分:0)

在我的问题中,我高估了选项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);
}