2

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

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

2 回答 2

3

另一种方法是发送一个带有水平方向的伪造车轮事件。

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() 指向错误的帧(例如大型机)。

于 2015-09-03T12:58:54.483 回答
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);
}
于 2012-05-25T12:20:40.940 回答