[Interest] High-dpi fixing for Qt 5.5

Elvis Stansvik elvstone at gmail.com
Fri Mar 2 15:37:04 CET 2018


2015-03-24 17:01 GMT+01:00 Till Oliver Knoll <till.oliver.knoll at gmail.com>:
>
>
> Am 24.03.2015 um 15:46 schrieb Agocs Laszlo <laszlo.agocs at theqtcompany.com>:
>
> Because Qt 3D most likely misses a few multiplications by
> devicePixelRatio(). Probably easy to correct.
>
>
>
> See
> http://www.qtdeveloperdays.com/sites/default/files/presentation_pdf/AgocsLaszlo_opengl_enablers_news.pdf#26
>
>
>
> Hi Laszlo,
>
> Thanks for the slides! They seem to contain the (partial) answer I was
> looking for: how to get notified when the screen (and hence possibly the
> resolution) changes.
>
> For QWindow based applications the answer seems to be
>
>  http://doc.qt.io/qt-5/qwindow.html#screenChanged
>
> For QWidget based applications however your slides suggest to "watch out for
> [...] ScreenChangeInternal event for QWidget". I assume this is "for Qt
> internal use only".
>
> In fact I found a change (by you ;)) from about 6 months ago which seems to
> introduce that "ScreenChangeInternal" event:
>
>
> https://qt.gitorious.org/qt/qtbase/commit/49194275e02a9d6373767d6485bd8ebeeb0abba5
>
> "Unlike ordinary widgets, the ones that have OpenGL framebuffers must know
> about screen changes because the device pixel ratio may be different on the
> new screen. Add an internal event, ScreenChangeInternal, as the counterpart
> to WindowChangeInternal."
>
>
> Is or will this event be exposed to the public QWidget API?

Sorry for necroposting, but I think this question went unanswered.

Anyone (Laszlo?) know if this API could be made public?

How can I (as application developer) get notified of screen changes of
non-QWindow-backed widgets?

Cheers,
Elvis

>
>
> Again, I am not sure whether I need to care (on an application level) at all
> about this use case (switch between monitors/screens with different
> resolution), but I strongly assume so: I create QPixmaps as needed (using a
> QPainter) and store them ("cache") in the corresponding QGrapicsPixmapItem.
> So when the resolution changes I would re-create those QPixmaps with the
> desired resolution.
>
> Then again, if I was to draw the QPixmap myself, I would use a QIcon (with
> the app attribute "Qt::AA_UseHighDpiPixmaps" enabled) to choose between the
> desired QPixmaps, as in:
>
>  QRect destinationRect = ...
>  QIcon icon = ...
>  painter.drawPixmap(destinationRect, icon.pixmap(destinationRect.size()));
>
> [http://blog.qt.io/blog/2013/04/25/retina-display-support-for-mac-os-ios-and-x11/]
>
> But since the QGraphicsPixmapItem is doing the drawing for me, I probably
> really need to get informed about resolution changes, and replace the
> pixmaps in the QGraphicsViewItem myself as needed (unless I am overseeing
> some other, simpler solution here). Or maybe if I would overwrite the
> QGraphicsPixmapItem::paint() method and use something like the above code...
> but that would almost defy the reason why I would use a QGraphicsPixmapItem
> in the first place... (I could derive from QGraphicsItem then directly
> instead).
>
>
> Any thoughts or ideas?
>
>
> Thanks, Oliver
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>



More information about the Interest mailing list