Change History

This section contains a list of all major changes from release to release starting from the most recent. The text in the square brackets after the release date shows the repository tag corresponding to this release (startng from version 3.3.1 Release Candidate 6). A tagged release can be checked out from the SVN repository using a path like<tag>.

For a more detailed list of changes please refer to the SVN repository. Older changes (for version 3.3.1 Release Candidate 5 and earlier) can be found in the file os2-doc\ChangeLog.CVS.

Release Candidate 6 (2005-11-18) [3.3.1-rc06]

The project has been moved to the SVN repository on netlabs ( The direct path to the main development branch is

The file src/tools/qconfig.cpp (containing default installation paths) is now automatically generated by the configure.cmd script when configuring the Qt library.

Release Candidate 5 (2005-11-12) [rc05]

Important Note. The Qt DLL built by this release is binary incompatible with the previous release. All applications must be relinked against the new version of the library.


QCursor is fully implemented, including creating custom pointer shapes from bitmaps.

QT_NO_PROPERTIES macro is not defined any more, so QObject's properties functionality is now available.

Implemented OS/2 PM Clipboard support (QMime and QClipboard classes); QT_NO_CLIPBOARD macro is no more defined by default.

Implemented QPixmap::xForm(); QT_NO_PIXMAP_TRANSFORMATION is no more defined by default.

Implemented font transformations according to QPainter view and world matrices (this still has some issues because both native TTF and FreeType2 font rendering engines are bogus when applying complex world transformations such as rotation).

Added the QMovie class; QT_NO_MOVIE is no more defined by default.

Enabled translation (internationalization) services, including QTranslator and QTranslatorMessage classes, plus lupdate.exe and lrelease.exe command line tools. QT_NO_TRANSLATION is no more defined.


OS/2 and eComStation are now mentioned in the QMessageBox::aboutQt() dialog.


Added the workspace module (QWorkspace class). The limitation of the current implementation is that child windows don't have sysmenu/min/max/close buttons and cannot be closed/maximized/minimized using the titlebar.

other changes

New examples: action, application, cursor, drawlines, i18n, mdi, network/archivesearch, network/ftpclient, network/infoprotocol, network/remotecontrol, picture, qfd, qmag, qtl, qwerty, rot13, showimg, textedit, tictac, toplevel and xform.

Various fixes (QTextEdit in LogText mode, QPopupMenu with multiple columns, using pixel sizes to select fonts), see os2-doc\ChangeLog for more info.

Added two new qmake project variables to the GNUMake backend: DEF_FILE_TEMPLATE and DEF_FILE_MAP (see here for more info). mkspecs/os2-g++/qmake.conf recognizes these variables and (with the help of the supplied emxexpw.cmd script) uses them as follows:

The Qt library, when built as a DLL, makes usage of the above DEF_FILE_* variables. This makes it possible to maintain binary compatibility between newer and older releases whenever it is technically possible (i.e. no new data members in Qt classes etc.).

The configure.cmd script has been rewritten from scratch. It is now fully interactive and is capable of searching for suitable versions of the compiler, linker and the make tool in the locations specified by the user.

Release Candidate 4 (2004-10-02) [rc04]

This release contains few fixes (\os2-doc\ChangeLog for full list) as well as the following new functionality.


Added zlib, jpeg, png, mng support (controlled via \configure.cmd), async I/O classes (defined in asyncio.h).

Added basic MIME support (QMimeSource class), no PM DDE <-> open MIME conversion yet (QMimeSource is just necessary for some other classes). Added basic DND support (QDragObject, QImageDrag, QTextDrag, QStoredDrag, QUriDrag), but no real drag & drop yet (QT_NO_DRAGANDDROP is still defined, but some classes need QDragObject and others to make the correct usage of QMimeSource).

QRegion now supports creating regions from QBitmaps (QRegion(const QBitmap &) constructor).


New classes: QWidgetPlugin (necessary for some other new classes), QTextBrowser; QDateTimeEditor, QDial, QSplashScreen, QWhatsThis.

Implemented animation effects support, (see QApplicaition::setEffectEnabled(), isEffectEnabled() methods), this means that the widgets module is now completely implemented.


Implemented network module (classes QDns, QFtp, QHostAddress, QHttp, QServerSocket, QSocket, QSocketDevice, QSocketNotifier) with the following limitations: no IPv6 support (QT_NO_IPV6 is defined), no synchronous lookups (i.e. defining Q_DNS_SYNCHRONOUS in qdns.h is useless), QSocketDevice::blocking() always returns TRUE (it seems that there's no way to determine the current blocking state of an arbitrary socket).

Note: the socket notification (QSocketNotifier) functionality is not available when Qt is compiled without threading support (this also means that QDns class will not function properly, as well as many other network applications that rely on the socket notification mechanism provided by Qt); in a single-threaded version of Qt such methods as QEventLoop::registerSocketNotifier() simply do nothing, and notification signals are never emitted.

other changes

The configure.cmd script has been moved from the \bin subdirectory to the root directory of the project.

Added new examples: scrollview, helpviewer; network\clientserver, network\httpd, network\mail, network\networkprotocol; all xml examples (the xml subdirectory). Note that the helpviewer example shows nothing after invocation (because Qt docs are not contained in the repository), point it to the existing html file to see the results.

GNUMake backend for qmake

A new makefile generator (backend) for qmake has been created, GNUMAKE. It is now used in Qt/OS2 along with the GCC compiler and the GNU Make utility to generate makefiles from qmake's project files (instead of a bit buggy MINGWMAKE backend). See here for more information about the GNUMAKE backend.

new linker

The linker used along with the GCC compiler has been changed. The previously used IBM ILINK 5.0 has some very unpleasant bugs that do not allow to build the DLL version (see below) of the Qt library. It is now necessary to use the linker from the distribution of IBM Visual Age C/C++ version 3.08. The copies of your gcc322.cmd and qt.cmd scripts should be updated with the new ones from the \os2-misc subdirectory (don't forget to correct path variables inside the scripts). Read also here about the steps necessary to compile the Qt Library.

Note that ILINK 3.08 creates executables and DLLs that are slightly bigger in size comparing to ones produced by ILINK 5.0. The freeware tool lxlite can be used to reduce the size of executables and DLLs, if desired.

DLL version of Qt

The Qt library can now be compiled as the DLL. The DLL variable has been added to the \configure.cmd script to control the type of the Qt library to compile. Set it to 1 to compile Qt as the the DLL and to 0 to compile it as the static library. After building the Qt DLL using configure.cmd, all Qt programs built using qmake wil be linked against this DLL. By default, configure.cmd compiles Qt as the release DLL with all available features turned on (excluding the gif support, due to its license limitations).

uic tool

The user interface compiler (uic) utility has been added to the project. As for now, It is primarily necessary to process the IMAGES qmake's project variable used to embed a collection of images to the executable, but can be also used to compile the user interface (.ui) files as well. However, there's still no QDesigner for OS/2, so .ui files can be created and edited only manually (with one limitation -- widget properties for setting the cursor shape are not supported by the current version of uic due to the currently incomplete QCursor class implementation).

Release Candidate 3 (2004-06-23) [rc03]

This release contains some fixes (see \os2-doc\ChangeLog) as well as the following new functionality.


Qt applications now use the PM Scheme Palette font settings to setup default fonts for widgets. This can be disabled by calling QApplication::setDesktopSettingsAware(FALSE).


The QWidget::reparent() method has been implemented. Things like tear-off menus (see the menu example) and toolbars (the action\toggleaction example) seem to work well.

other changes

New examples: menu, rangecontrols, listbox, tabdialog, wizard, life, hello, gridview, forever, fonts, addressbook, splitter, layout, customlayout, themes, scribble, action\toggleaction, thread\prodcons, thread\semaphores. Note that the themes example using the Norwegian Wood theme doesn't handle the button roundness because non-rectangular widgets are not currently supported by Qt/OS2.

The RELEASE variable has been added to the bin\configure.cmd script to control the type of the Qt library to be compiled. Set it to 1 to compile the release version and to 0 to compile the debug version.

Release Candidate 2 (2004-06-16) [rc02]

This release is mostly a bugfix. See \os2-doc\ChangeLog for the detailed info about all fixes applied. Also, the following functionality has been added.


Qt applications now use the PM Scheme Palette color settings to setup the default palette for widgets. This can be disabled by calling QApplication::setDesktopSettingsAware(FALSE).

Mouse wheel handling (QEvent::Wheel) now works, the wheel can be used in all widgets that support it. System settings for the mouse wheel (standard or AMouse) are currently ignored, because Qt handles things such as the number of lines to scroll per whell rotation on its own, and doesn't offer a setting to tell it to be aware of system settings.

The optimization setting for pixmaps with masks is now meaningful: NoOptim/MemoryOptim optimizes for memory, NormalOptim/BestOptim -- for speed. Memory optimization causes QPixmap not to store a special precomposed image for every pixmap but recreate it every time the pixmap is drawn.

Rich text support for widgets has been enabled and seems to work well. This includes QStyleSheet and QSimpleRichText classes. Widgets that support it (for example, QMessageBox) now display rich text strings correctly.


New widgets: QGridView, QSpinBox, QSyntaxHighlighter, QTextEdit, QTextView.


Two new dialogs: QColorDialog and QFontDialog.

other changes

New examples: lineedits, listboxcombo, listviews, progressbar.

Release Candidate 1 (2004-06-04) [rc01]

This release candidate brings Qt/OS2 functioality to a level where it can be used to create simipe "general-purpose" applications: many commonly used widgets are done. Some (mostly cosmetic) shortcomings are still present (for example, images do not support transparency yet) -- this will be fixed in next releases.


The modal widget functionality has been implemented (including Qt::WShowModal widget flag). QEvent::WindowBlocked and WindowUnblocked are now sent to widgets when they are blocked/unblocked by modal widgets. Unlike on Qt/Win32, these events are sent to all top-level widgets, not only to the direct parent of the modal widget being shown/hidden.

The popup widget functionality has been done (Qt::WType_Popup widget flag). It has no significant differences comparing to Qt/Win32; in particular, popup widgets do not grab mouse move events addressed to widgets from other applications, except when a mouse button is pressed down while moving (as this can be seen in the popup example). It should be noted here, that QWidget::grabMouse() in OS/2 does grab such events, which differs from Qt/Win32 where this function has the same effect as in popups.

New classes: QLocalFs, QUrl, QUrlOperator, QUrlInfo, QNetworkProtocol. These classes do not bring the network support to Qt/OS2 -- they are network helper classes that also required by some common widgets, such as QFileDialog.


The dialogs module has been started: QDialog, QMessageBox, QProgressDialog and QFileDialog are now present. QFileDialog is a pure Qt widget, native OS/2 PM file dialogs are not yet supported.


New widgets:

New methods:

other changes

New examples: popup, progress, buttongroups, checklists, tooltip.

Beta 2 (2004-05-27) [b02]


Mouse and keyboard event handling has been implemented. The following new types of events are now handled by Qt/OS2 and delivered to widgets:

Also, the following has been added:

Keyboard handling

DBCS keyboard input is not tested, and most likely will not work correctly in Qt/OS2.

System menu

The system menu of the top-level widget (if it is present) can be activated by pressing the ALT+<space> keyboard combination. Pressing single ALT doesn't show it, this is done for compatibility with other Qt versions. Also, frame size/position accelerators (ALT+F7 etc.) have been disabled for the same reason. They are still present in the menu item text, but it will be fixed in the next release.


The widgets module implementation has been started. The following classes are currently available and seem to function well: QButton, QButtonGroup, QLabel, QFrame, QPushButton, QCheckButton, QRadioButton, QLCDNumber, QRangeControl, QSlider.

Also, layout management has been completely compiled in and partially tested, including classes: QBoxLayout, QButtonGroup, QGLayoutIterator, QGrid, QGridLayout, QGroupBox, QHBox, QHBoxLayout, QHButtonGroup, QHGroupBox, QLayout, QLayoutItem, QLayoutIterator, QSizePolicy, QSpacerItem, QVBox, QVBoxLayout, QVButtonGroup, QVGroupBox, QWidgetItem.

other changes

The Qt/OS2 distribution now contains the Qt tutorial and examples from the original Qt 3.3.1 distribution that can be compiled without any modifications and run well under OS/2. This doesn't mean though that they are fully functional (comparing to other platforms) -- some functionality (such as the non-rectangular window in the aclock example) is still missing in Qt/OS2, but these examples can at least properly handle such situations (usually doing nothing or keeping some kind of "default" behavior when the missing functionality is requested).

The Qt tutorial can be completely compiled on OS/2 and works fine, as well as aclock and dclock examples. The compilation of tutorial applications and examples is done automatically by the configure.cmd script.

Beta 1 (2004-05-18) [b01]


Big work is done to implement the font support (QFont, QFontInfo, QFontMetrics, QFontDatabase classes). This in particular means that all kernel module visualization functionality (primitives, images, fonts) is now done. The current font implementation has the following limitations:

Also, the following has been added:


The styles module (QStyle, QStyleFactory etc.) has been enabled for compilation. Currently, OS/2 version of Qt uses the "Windows" (QWindowsStyle) style for widgets by default (though, this cannot be seen in this beta -- no widgets that use styles are completely ready at this moment).

other changes

Alpha 2 (2004-05-07) [a02]

This alpha is intended to test the basic GUI functionality: widget creation, starting the main event loop, painting widgets and drawing on pixmaps (graphic primitives, colors, images).


The tools module is completely done (some of recent classes are QMutex, QSemaphore, QWaitCondition, QThread, QThreadStorage).

QThread::wait (time)

Since OS/2 doesn't support specifying a maximum time to wait for a thread to end other than infininty we use a loop containing of wait intervals until the thread has ended or the maximum time specified by the caller has expired, which brings the granularity of 1 second (the length of the wait interval) to this process.


The codecs module (QTextCodec class) seems to be done (excluding QHerbewCodec, that depends on QTextEngine)


The meta object compiler (moc) added to the project, compiled and seems to work well.


The kernel module is done on about 75 percent. Here are the most imortant classes that have been implemented (with a very brief description of implemented and disabled features -- the most of this will be changed later):

There is no support for MNG, PNG and JPEG formats at the moment, it will be compiled in later.

There is no zlib integration yet, will also be done later.

other changes

Compilation tools are updated (Innotek GCC and GNU Make). The process of building Qt is changed (in particular, it is now built as the static library). This is described here.

The aclock example from the Qt-Win32 distribution now compiles and runs well (except that there is no full mouse support and no transparent mode). Instructions are at the same place as above.

Alpha 1 (2004-04-09) [a01]

The aim of this first step is to organize and test the compilation environment to make sure it is suitable for further development. Also it gives us many of non-visual widely used Qt classes from the tools module compiled for OS/2 as well as the OS/2 version of the qmake utility which uses these classes.

Currently the following most important public Qt classes are available (this list is not complete): QLibrary, QSettings, QDir, QFile, QFileInfo, QLocale QDate, QTime, QDateTime, QString, QChar, QCString plus various container and iterator classes.


QSettings class is implemented using the Open32 registry API available in recent OS/2 versions (REGISTRY.DLL). This registry is very similar to the Windows one so this class should behave nearly the same as on Windows.


The QFileInfo class is implemented in the following way:


Since everything is currently compiled with the QT_NO_TEXTCODEC flag set QString will return question (?) marks for all unicode symbos with codes greater than 0x00FF. However, non-Unicode string data taken from the OS (for example in file operations) will be simply converted to unicode by expanding every non-unicode byte to a unicode word, meaning that the conversion from Unicode back to single byte (for example, during the output to the console) will preserve nationals. This is the standard behavior of Qt and it is not critical for most console mode applications as long as QStrings are not presistently stored in the unicode form and the system local character set is not changed.


The current OS/2 version of qmake uses the MINGW makefile generator mode. Resulting makefiles produced by qmake from Qt project files seem to be processed well by GNU Make, however the following known limitations currently apply:

These limitations will be eliminated in the future, probably by implementing a separate makefile generator class.

qmake for OS/2 understands the new command line option -os2 that tells it to use OS/2 semantics when generating makefiles, and the new scope specifier os2 in Qt project files to isolate OS/2-specific project parts.

The qmake specification for OS/2 and GCC is named os2-g++ and after setting the QMAKESPEC variable accordingly it is available for use.

Please also refer here to get info about how to compile and run qmake.