QWebEngineView如何禁用捏缩放

时间:2019-09-26 10:28:41

标签: qt qt5 qwebengineview

我正在显示HTML网页的触摸Linux设备上运行带有QWebView的Qt 5.9.4应用。

当用户将手指捏在屏幕上时,他们会放大网页。我想禁用该行为,因为所有网页均应100%全屏显示。

我可以通过在视口中添加user-scalable=no来在网页中暂时禁用它(因为我拥有自己的代码),但是从长远来看,它将无法正常工作,因为并非每个网页都具有该功能。

我尝试在应用程序的不同元素上使用eventFilter,但无法捕获任何手势或鼠标事件。

这是我在QDialog中创建Web视图的方式:

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);

以及所有其他元素(配置文件,页面,对话框),但似乎未获得与鼠标或手势相对应的任何事件。 我究竟做错了什么?如何在整个网络视图中阻止这种行为?

将事件侦听器添加到QApplication对象之后,我可以检测到TouchBegin,TouchUpdate,TouchCancel和TouchEnd事件,但没有其他事件(没有Gesture事件)。我不知道如何检测touchevent是否为缩放手势。

1 个答案:

答案 0 :(得分:0)

我认为您可以在Dialog上使用它(未测试)。我还有其他一些小部件,它显示了QML QtWebView,而我为防止该小部件的子级获得捏手势而做的事情是:

this->grabGesture(Qt::PinchGesture, Qt::DontStartGestureOnChildren);

这可以防止基础小部件接收PinchGesture,以便您可以自行处理。