QWebEngineView 如何禁用捏合缩放
Posted
技术标签:
【中文标题】QWebEngineView 如何禁用捏合缩放【英文标题】:QWebEngineView how to disable pinch-to-zoom 【发布时间】:2019-09-26 10:28:41 【问题描述】:我在显示 html 网页的触摸 Linux 设备上运行带有 QWebView 的 Qt 5.9.4 应用程序。
当用户在屏幕上捏手指时,他们会放大网页。我想禁用该行为,因为所有网页都应该 100% 全屏显示。
我可以通过将user-scalable=no
添加到视口来暂时在网页中禁用它(因为我拥有他们的代码),但从长远来看这不会起作用,因为不是每个网页都会有它。
我尝试在我的应用程序的不同元素上使用 eventFilter,但无法捕获任何手势甚至鼠标事件。
这就是我创建 web 视图的方式(在 QDialog 中):
void Dialog::createWebView()
view = new QWebEngineView(this);
profile = new QWebEngineProfile();
page = new QWeEnginePage(profile);
view->setPage(page);
view->setUrl(QUrl(path));
这是我的 eventFilter 类:
EvFilter::EvFilter(QObject *parent) : QObject(parent)
bool EvFilter::eventFilter(QObject *obj, QEvent *event)
qDebug() << event->type() << "\n";
return QObject::eventFilter(obj, event);
我试过了
EvFilter* evf = new EvFilter();
view->installEventFilter(evf);
而且在所有其他元素(配置文件、页面、对话框)上,但似乎无法获得与鼠标或手势对应的任何事件。 我究竟做错了什么?我怎样才能在整个 webview 中防止这种行为?
将事件侦听器添加到 QApplication 对象后,我可以检测到 TouchBegin、TouchUpdate、TouchCancel 和 TouchEnd 事件,但没有其他(没有 Gesture 事件)。我不知道如何检测 touchevent 是否是缩放手势。
【问题讨论】:
尝试在view->setUrl(QUrl(path));
之后添加EvFilter* evf = new EvFilter(); view->focusProxy()->installEventFilter(evf);
@eyllanesc 不幸的是,它的工作方式与在整个 QApplication 上安装它的方式相同,我可以看到触摸事件,但我不知道如何知道它们何时用于缩放以及何时只是正常触摸事件。我想在所有设备上完全禁用缩放。是否可以?我找不到任何禁用缩放的设置。
【参考方案1】:
我认为你可以在对话框上使用它(没有测试它)。我有一些其他小部件显示 QML QtWebView,而我为防止小部件的孩子获得捏手势所做的事情是:
this->grabGesture(Qt::PinchGesture, Qt::DontStartGestureOnChildren);
这会阻止底层小部件接收 PinchGesture,以便您自己处理。
【讨论】:
以上是关于QWebEngineView 如何禁用捏合缩放的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式启用/禁用捏合以放大 WKWebView 和 viewForZoomingInScrollView