Я хочу отобразить некоторый HTML-контент в своем приложении Qt Widgets, и я хочу перехватывать ссылки, на которые нажали.
Итак, я подкласс 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;
}