Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>It seems the view becomes useless after the page is rendered in the extern browser. You might just schedule the ExternalWebView for deletetion with deleteLater():</p> <pre><code>#include &lt;iostream&gt; #include &lt;QApplication&gt; #include &lt;QGridLayout&gt; #include &lt;QNetworkRequest&gt; #include &lt;QDesktopServices&gt; #include &lt;QEvent&gt; #include &lt;QMainWindow&gt; #include &lt;QWebView&gt; class ExternWebPage : public QWebPage { //Q_OBJECT public: ExternWebPage(QObject* parent = 0) : QWebPage(parent) { std::cout &lt;&lt; "ExternWebPage" &lt;&lt; std::endl; } ~ExternWebPage() { std::cout &lt;&lt; "Destroy ExternWebPage" &lt;&lt; std::endl; } virtual bool event(QEvent *e) { static unsigned counter; std::cout &lt;&lt; ++counter &lt;&lt; " ExternWebPage: " &lt;&lt; e-&gt;type() &lt;&lt; std::endl; return QWebPage::event(e); } bool acceptNavigationRequest(QWebFrame *, const QNetworkRequest &amp;request, NavigationType) { QDesktopServices::openUrl(request.url()); return false; } }; class ExternWebView : public QWebView { //Q_OBJECT public: ExternWebView(QWidget* parent = 0) : QWebView(parent) { std::cout &lt;&lt; "ExternWebView" &lt;&lt; std::endl; } ~ExternWebView() { std::cout &lt;&lt; "Destroy ExternWebView" &lt;&lt; std::endl; } virtual bool event(QEvent *e) { static unsigned counter; std::cout &lt;&lt; ++counter &lt;&lt; " ExternWebView: " &lt;&lt; e-&gt;type() &lt;&lt; std::endl; return QWebView::event(e); } }; class InternalWebView : public QWebView { //Q_OBJECT public: InternalWebView(QWidget* parent = 0) : QWebView(parent) {} QWebView* createWindow(QWebPage::WebWindowType) { auto res = new ExternWebView(); res-&gt;setPage(new ExternWebPage(res)); res-&gt;deleteLater(); return res; } }; class Window : public QMainWindow { //Q_OBJECT public: Window() : QMainWindow() { std::cout &lt;&lt; "Window" &lt;&lt; std::endl; auto web = new InternalWebView(this); web-&gt;setHtml("&lt;div align=\"center\"&gt;&lt;a href=\"http://www.google.com/\"&gt;Same Window&lt;/a&gt; &lt;a href=\"http://www.google.com/\" target=\"_blank\"&gt;New Window&lt;/a&gt;&lt;/div&gt;"); setCentralWidget(web); } ~Window() { std::cout &lt;&lt; "Destroy Window" &lt;&lt; std::endl; } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); Window w; w.show(); return a.exec(); } </code></pre> <p><strong>Test without deletion:</strong></p> <pre><code>Window ExternWebView 1 ExternWebView: 68 ExternWebPage 2 ExternWebView: 74 3 ExternWebView: 75 1 ExternWebPage: 43 2 ExternWebPage: 43 3 ExternWebPage: 43 4 ExternWebPage: 43 5 ExternWebPage: 43 Destroy Window </code></pre> <p><strong>Test with delete later:</strong></p> <pre><code>ExternWebView 1 ExternWebView: 68 ExternWebPage 2 ExternWebView: 74 3 ExternWebView: 75 4 ExternWebView: 52 Destroy ExternWebView Destroy ExternWebPage Destroy Window </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload