Hi Denis,
Most Qt widgets are not drawn using opengl but instead are rasterized.
I was surprised when I first learned this as well.
"QPainter <http://doc.qt.io/qt-5/qpainter.html> provides API for drawing
vector graphics, text and images onto different surfaces, or
QPaintDevice <http://doc.qt.io/qt-5/qpaintdevice.html> instances, such
as QImage <http://doc.qt.io/qt-5/qimage.html>, QOpenGLPaintDevice
<http://doc.qt.io/qt-5/whatsnew50.html#qopenglpaintdevice>, QWidget
<http://doc.qt.io/qt-5/qwidget.html>, and QPrinter
<http://doc.qt.io/qt-5/qprinter.html>. The actual drawing happens in the
QPaintDevice <http://doc.qt.io/qt-5/qpaintdevice.html>'s QPaintEngine
<http://doc.qt.io/qt-5/qpaintengine.html>. The software rasterizer and
the OpenGL (ES) 2.0 back-ends are the two most important QPaintEngine
<http://doc.qt.io/qt-5/qpaintengine.html> implementations. *The raster
paint engine is Qt’s software rasterizer, and is used when drawing on a
QImage <http://doc.qt.io/qt-5/qimage.html> or QWidget
<http://doc.qt.io/qt-5/qwidget.html>.* Its strength over the OpenGL
paint engine is its high quality when antialiasing is enabled, and a
complete feature set.”
On 29/08/18 06:21 AM, Denis Shienkov wrote:
I even have created a simple test app, which re-fill the 1280x800 rect
every 50 msec with the 'red' and 'green' colors.
[code]
#include<QApplication>
#include<QWidget>
#include<QPaintEvent>
#include<QPainter>
classWidgetfinal:publicQWidget
{
public:
explicitWidget(QWidget*parent=nullptr);
private:
voidpaintEvent(QPaintEvent*event)final;
voidtimerEvent(QTimerEvent*event)final;
};
Widget::Widget(QWidget*parent)
:QWidget(parent)
{
startTimer(50);
}
voidWidget::paintEvent(QPaintEvent*event)
{
QPainterp(this);
staticbooltoggled=false;
constautocolor=(toggled)?QColor(Qt::red):QColor(Qt::green);
constautorect=event->rect();
p.fillRect(rect,color);
toggled=!toggled;
}
voidWidget::timerEvent(QTimerEvent*event)
{
Q_UNUSED(event);
update();
}
intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);
Widgetw;
w.setMinimumSize(1280,800);
w.show();
returnapp.exec();
}
[/code]
And then I see that the Desktop PC has the ~0% CPU load, but the iMX6
has ~50% CPU load. WTF?
BR,
Denis
ср, 29 авг. 2018 г. в 12:39, Denis Shienkov <denis.shien...@gmail.com
<mailto:denis.shien...@gmail.com>>:
Hi all.
I have an Apalis iMX6 board with the Yocto's image with the
working 'eglfs' and 'linuxfb' backends (without of X11 support).
I need to create a 'pure' QtWidgets application, where I need to
use a real-time plotting with the Qwt library (using the Qt Quick
is not an option, as there the QtCharts is not ready for usage) .
But, I'm sadly surprised that a 2D painting takes ~100% CPU
loading as with the 'eglfs' and as with 'linuxfb' backends. It is
not an acceptable, because, e.g. on Desktop Linux/Windows it takes
~4-5% CPU loading.
Is any workarounds for this? Maybe I need to re-build the Yocto's
image to enable the X11 'xcb' support?
BR,
Denis
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development