Qt6 topics merged with General

QWebView for running D3 javascript is slow after reloading HTML.

  • I am using a QWebView to display plots using javascript and D3. There is a combobox to select different datasets. Each time a new dataset is selected, some calculations are done, then the javascript is reinitialized with the new data and set as an html string. Then the QWebview is reset using QWebView::setHtml().

    If I change the combobox value a few times, the plots load exponentially slower each time until it eventually freezes. Sometimes it will eventually load and sometimes not.

    (I'm not sure the javascript is relevant - it is not my area of expertise so I haven't taken the time to understand it yet. I'm hoping the problem can be resolved with Qt code)

    From the QWebView documentation: "The html is loaded immediately; external objects are loaded asynchronously."

    My guess is that the javascript continues to execute in the background and it doesn't stop when the html is updated and reloaded. Is there a way to stop this?

    The code for initializing and updating are as follows:

    dataView::dataView(QWidget* parent) : QWidget(parent)
    void dataview::updatePlot()
      //Get new value and do some calculations
      // Update html string with new data
      std::string htmlString = "[new javascript]";
    void dataView::init()
       webView = new QWebView();
      // Need path to exe as this is where the local copies of the js files are.
      QUrl path = webView->url();
      m_jsPath = path.toString().toStdString();  
      // Initialise the html string
      webSetting = webView->settings();
       // Maybe doing nothing-----------------------
       webSetting->setObjectCacheCapacities(0, 0, 0);
      QPointer<QVBoxLayout> mainLayout = new QVBoxLayout();

    Hopefully I have included all the relative information code.

  • The issue seems to be in Qt5.5 - I compiled with 5.3 and the issue is gone.

  • Which version of QtWebKit are you using?
    Does problem reproduce if you remove cache settings?

  • This post is deleted!

  • @Konstantin-Tokarev

    I am using Qt 5.5

    I am unsure how to remove the cache settings but I will try that right now.

    Edit: It appears that

    webSetting->setObjectCacheCapacities(0, 0, 0);

    should disable cache, so I have tried this.

  • Yep, try without this line

  • @Konstantin-Tokarev

    I have tried it with all combinations of the following settings (one, other one, both, none)

    webSetting->setObjectCacheCapacities(0, 0, 0);

    I am going to try another Qt version and see if that has an effect.

  • You should use qtwebkit from 5.212 branch, version coming with Qt 5.5 is obsolete

  • @Konstantin-Tokarev said in QWebView for running D3 javascript is slow after reloading HTML.:


    Thanks for the advice. Is 5.212 > 5.10?

    And why such a weird version number? Should I download form git or is the qt installer going to have it?

  • @CLang For use with Qt 5.10, get binaries from http://download.qt.io/snapshots/ci/qtwebkit/5.212/latest/qtwebkit/

    And why such a weird version number?

    It isn't tied to particular Qt version, instead respective WebKitGTK's branch name is used as a basis

  • @Konstantin-Tokarev

    Thanks for all your help.

    Does this mean I could download the source, compile it with cmake and msvc2013_64 and use it with qt5.5?

  • No, MSVC 2013 is not supported. You need MSVC >= 2015 or MinGW >= 4.9

  • @Konstantin-Tokarev I actually downgraded to 5.3 and the issue has resolved.

    What's the best way to resolve this post? Reply to the initial post with the solution and change to 'solved'?

  • The issue seems to be in Qt5.5 - I compiled with 5.3 and the issue is gone.

Log in to reply