Development/Tutorials/Graphics/HiDPI: Difference between revisions

From KDE TechBase
(Created page with "== Introduction == HiDPI devices are very common today. Users need to scale up UI to make them looks like normal size. Common scale factors are: '''1.25''', '''1.5''', '''1.7...")
 
Line 42: Line 42:


So where is the <code>dpr</code> variable from? You can get it from any <code>QWidget</code> objects with function <code>devicePixelRatioF()</code>. '''F''' means the function return a float number (<code>qreal</code>).
So where is the <code>dpr</code> variable from? You can get it from any <code>QWidget</code> objects with function <code>devicePixelRatioF()</code>. '''F''' means the function return a float number (<code>qreal</code>).
And don't forget to change <code>width</code> and <code>height</code> from <code>int</code> to <code>qreal</code>.


== QPainter ==
== QPainter ==

Revision as of 17:22, 20 July 2019

Introduction

HiDPI devices are very common today. Users need to scale up UI to make them looks like normal size. Common scale factors are: 1.25, 1.5, 1.75, 2, 3. KDE and Qt applications may render blur icons and graphics. This guide shows how to make everything sharp and clear in HiDPI devices. Both Qt 5 Widgets and Qt 5 Quick applications are supported.

Migrate to Qt 5 and KF5

Qt 4 doesn't support HiDPI rendering. Please migrate your application to Qt 5 and KF5.

Texts

You don't need to do anything special. Text rendering should support HiDPI out of box.

Icons

In your application's main function, add the following lines at the very beginning:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    app.setAttribute(Qt::AA_UseHighDpiPixmaps, true);
    ...
}

Then all icons in your application should look sharp.

QPixmap

Change all QPixmap from

pixmap = QPixmap( width, height );

to

pixmap = QPixmap( width * dpr, height * dpr );
pixmap.setDevicePixelRatio(dpr);

So where is the dpr variable from? You can get it from any QWidget objects with function devicePixelRatioF(). F means the function return a float number (qreal).

And don't forget to change width and height from int to qreal.

QPainter