Search code examples
qtjquery-mobileqt4qtwebkit

QGraphicsWebView incorrectly expands horizontally with unused white bars (window.outerWidth >> window.innerWidth)


I'm using a view hierarchy of

QMainWindow > central widget > QVBoxLayout > QGraphicsView (800x600 fixed) > class deriving from QGraphicsScene > QGraphicsWebView (800x600)

When I load a jQuery Mobile powered HTML file and use the horizontal slide transition between pages, the value of window.outerWidth grows to 2400 pixels. But the actual page width, and value of window.innerWidth, remains at 800. The web view then shows 800 pixel-wide white bars at the left and right (horizontal scrollbar also expands to 2400px), with the new jQM "page" in the middle. Right-clicking in the white bars does not show the QtWebView context menu, but right-clicking in the middle works. I enabled developer tools [1] which told me that the HTML, BODY and DATA-ROLE="page" elements have the correct width of 800px.

This is working in browsers like Firefox and Chrome, so I think it's a bug in Qt's web view implementation or a setting that I have missed. The problem seems to come from the fact that the jQM pages which are sliding in/out during transitions are considered for the width. Why does window.outerWidth get such a wrong value? Note that any size policies on the web view do not have an effect. Any ideas what else I could try?


[1] "Inspect" context menu option:

QWebSettings::globalSettings()->setAttribute(
    QWebSettings::DeveloperExtrasEnabled,
    true);

Solution

  • Solved it by upgrading to Qt 5 which has the latest WebKit. It however creates new trouble, so first try if the rest of your web pages work before switching to the newly released 5.0.0.