Qt 4.8

2011-12-15 16:30

Heute ist mit Qt 4.8 eine neue und wichtige Version von Qt erschienen. Qt 4.8 wird wohl der letzte große Release der 4.x Serie sein, ein Qt 4.9 wird es nicht mehr geben. Ab April/Mai 2012 ist dann mit dem erscheinen von Qt5 zu rechnen.
Qt5 wird viele Neuerungen enthalten, 4.8 bietet schon mal ein Vorgeschmack darauf.

Neues in Qt 4.8

Neben den üblichen Bugfixes enthält Qt 4.8 vor allem 4 zentrale, wichtige Neuerungen:
  • QPA (aka lighthouse)
  • Multithreaded OpenGL
  • Threaded HTTP
  • Optimierter Dateisystemzugriff
Mit QPA gibt es nun eine einheitliche API für die Portierung von Qt auf weitere Windowingsysteme. Damit wird der Aufwand Qt auf andere Plattformen zu portieren erheblich reduziert. Mit Qt5 sollen dann alle Qt Portierungen auf QPA aufsetzen. QPA ist aus lighthouse entstanden, und u.a. die Basis für die Android und iOS Portierungen von Qt.

Mit Multithreaded OpenGL gibt es nun die Möglichkeit mehrere Threads nach OpenGL Rendern zu lassen. Dies betrifft die Qt eigenen OpenGL Klassen, diese waren bisher nicht Threadsafe, so dass man mit Qt nur in einem Thread nach OpenGL rendern konnte. So lässt sich nun der QPainter in einen Thread auslagern, wärend das QGLWidget im Hauptthread verbleibt. Der OpenGL Context wird dann im Painting Thread ausgeführt.

Threaded HTTP bringt nun eine Neuerung zu Qt. HTTP Request werden nun per Default in einem extra Thread gehandhabt. Dies dient der Performance von netzlastigen Applikationen, es gibt aber auch ein Flag welches den Start des HTTP Threads verhindert, und die HTTP Anfragen wie bisher im Hauptthread behandelt. Das Interface für HTTP Anfragen bleibt nach wie vor der QNetworkAccessManager und seine Hilfsklassen (QNetworkRequest/Reply etc.).

In Qt 4.8 wurde auch der Dateisystemstack des Frameworks überarbeitet und redesigned. Dadurch konnte erreicht werden, das es in der Dateihandhabung weniger Systemaufrufe gibt. Dies führt unter anderem zu weniger I/O Aufrufen, ausserdem wurde das Caching verhalten verbessert.

Ebenfalls ein Update hat die QtWebKit API erhalten, sie wird mit Qt 4.8 in der Version 2.2.1 ausgeliefert. Neu sind auch 2 APIs, welche einmal die Localisation API und einmal die IP Multicast API sind. Eine weitere Neuerung ist, das man nun für das Kompilieren von Qt, Perl benötigt.

Qt4.8 und C++11

Ein weiteres Highlight ist der C++11 Support in Qt 4.8, dies geht leider in der Berichterstattung etwas unter.
QVector, QList und QStringList lassen sich nun per Initializer List initialisieren (Anmerkung, dieses C++11 Feature wird aktuell nur vom GCC unterstützt.). Viele Qt Klassen besitzen nun auch einen Move operator. Auch ist es möglich, in einigen Funktionen von QtConcurrent lassen sich nun Lambdas nutzen. Bis auf die Inititalizer Lists lässt sich dies auch mit MSVC und dem Intelcompiler nutzen. Qt5 wird wahrscheinlich weitere C++11 Features unterstützen, allerdings bleibt dies auch immer eine Frage der verwendeten Compiler.

Weitere Infos zu Qt 4.8 finden sich hier.


Zurück