如何在[Qt] Web视图中过滤掉«back»事件?

时间:2013-12-03 04:50:15

标签: qt qtwebkit qwebview

我使用基于WebKit的表单开发应用程序,重要的是,当在表单上时,用户可以按Backspace而不返回上一页。我如何在QtWebKit中执行此操作?

我发现可以从QWebPage继承一个类并重载QWebPage::triggerAction()以选择性地过滤掉事件,例如QWebPage::Back。然而,它仅适用于第一页,如果您在同一webview子项中打开另一个页面,则不会调用triggerAction()重载。

2 个答案:

答案 0 :(得分:0)

目前,回答是“没有简单的方法可以做到这一点”。我已经在Qt的错误跟踪器上找到了答案,请参阅https://bugreports.qt-project.org/browse/QTBUG-35555

希望这将得到解决。

答案 1 :(得分:0)

您可以尝试以下其中一种选择:

1。 eventFilter:

bool CWebView:eventFilter( QObject *pObj, QEvent *event )
{
 QKeyEvent* pkeyEvent = (QKeyEvent*)event;

 if (Qt::ControlModifier == pKeyEvent->state())
 {
  switch (pKeyEvent->key())
  {
   case Qt::Key_Backspace:
     //something (eg. return false)
   break;
  }
 }
 return true;
}

2。清除历史记录:

#include <QWebHistory>

...

QWebView* CWebView;
...
CWebView->history()->clear();

3。 Javascript(我认为最好的选择):

window.location.replace(url);
  

使用replace()后,当前页面将不会保存在会话中   历史记录,意味着用户将无法使用“后退”按钮   导航到它。

来源:https://stackoverflow.com/a/8969975/1518921