Porting to Qt 6 - Qt Widgets

Qt 6 is a result of the conscious effort to make the framework more efficient and easy to use.

We try to maintain binary and source compatibility for all the public APIs in each release. But some changes were inevitable in an effort to make Qt a better framework.

In this topic we summarize those changes in Qt Widgets, and provide guidance to handle them.

Kernel classes

QWidget

The virtual QWidget::enterEvent() handler now receives a QEnterEvent* parameter which has information about the pointer position, rather than a plain QEvent*.

QDesktopWidget and QApplication::desktop()

QDesktopWidget was already deprecated in Qt 5, and has been removed in Qt 6, together with QApplication::desktop().

QScreen provides equivalent functionality to query for information about available screens, screen that form a virtual desktop, and screen geometries.

Use QWidget::setScreen() to create a QWidget on a specific display; note that this does not move a widget to a screen in a virtual desktop setup.

QAction, QActionGroup

These classes have been moved into the QtGui module. Member functions that depend on types defined in QtWidgets (such as QAction::menu() and QAction::setMenu()) are implemented as templates that will be instantiated only when called.

QPixmap, QBitmap, and QCursor

QBitmap and QCursor can no longer be implicitly created from a QPixmap; use the explicit constructor and factory function instead.

Widgets

QAbstractButton

The default timeout parameter for QAbstractButton::animateClick() is removed to allow modern connection syntax without the need for qOverload.

QComboBox

The QComboBox::setModel() function is now virtual.

All versioned QStyleOption subclasses are consolidated, and the version numbers are reset to 1.

The various initStyleOption() methods in widget classes are now virtual.

Printing Classes

QPagedPaintDevice, QPrinter, QPageSize, QPageLayout

The various enums and types for page sizes, margins, and orientation have been consolidated. QPrinter APIs to set paper sizes and margins explicitly have been removed; use QPagedPaintDevice::setPageLayout(), QPagedPaintDevice::setPageSize(), QPagedPaintDevice::setPageOrientation(), and QPagedPaintDevice::setPageMargins() instead.