我想在我的Qt Widgets应用程序中显示一些HTML内容,并且想拦截点击的链接。
因此,我继承了QWebEnginePage
的子类以覆盖bool acceptNavigationRequest(const QUrl &, NavigationType, bool)
。
在此测试中,我总是返回false。任何单击的链接都会调用该方法,但是只有具有http:
方案的链接不会离开页面。当我单击带有myapp:
方案的链接时,QWebEngineView
进入空白页。
class MyPage : public QWebEnginePage
{
public:
explicit MyPage(QObject *parent = nullptr) : QWebEnginePage(parent) {}
protected:
bool acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame)
{
if(url.scheme() == "data") return true; // allow to load data from setHtml() method
return false;
}
};
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QString html;
html += "<html><head></head><body><ul>";
html += "<li><a href=\"myapp:open/scene.tz\">scene download link (custom scheme)</a></li>";
html += "<li><a href=\"http://www.myapp.com/open/scene.tz\">scene download link (http)</a></li>";
html += "</ul></body></html>";
ui->webView->setPage(new MyPage(this));
ui->webView->page()->setHtml(html);
}
MainWindow::~MainWindow()
{
delete ui;
}