我使用基于WebKit的表单开发应用程序,重要的是,当在表单上时,用户可以按Backspace而不返回上一页。我如何在QtWebKit中执行此操作?
我发现可以从QWebPage
继承一个类并重载QWebPage::triggerAction()
以选择性地过滤掉事件,例如QWebPage::Back
。然而,它仅适用于第一页,如果您在同一webview子项中打开另一个页面,则不会调用triggerAction()重载。
答案 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()后,当前页面将不会保存在会话中 历史记录,意味着用户将无法使用“后退”按钮 导航到它。