This is Beta 4 of Qt version 4.5.1 for OS/2 and eCS. This document contains a brief information on the OS/2 version of the Qt library plus a brief list of OS/2-specific changes from release to release (section CHANGES below). Please visit the project page at http://svn.netlabs.org/qt4/wiki to get more information and the latest news and also to report bugs. REQUIREMENTS In order to compile the Qt library, you will need the following tools: - One of the OS/2 Warp 4, OS/2 Warp 4.5 or eComStation operating systems. - InnoTek GCC compiler version 3.3.5 CSD3 or above (not tested). You can download a copy of the compiler using the following link: ftp://ftp.netlabs.org/pub/gcc/GCC-3.3.5-csd3.zip - Patched OpenWatcom linker which you can download from here: ftp://ftp.netlabs.org/pub/gcc/wl-hll-r1.zip Note that if you use IBM ILINK (no matter what version), you will not be able to build the debug version of the library due to bugs/limitations of ILINK. - GNU Make 3.81beta1 or above (not tested) available at: http://unix.os2site.com/pub/binary/make/make-3_81beta1-bin-static.zip - LxLite 1.3.3 or above (not tested) if you want Qt DLLs and application executables to be compressed (to save hard disk space and load time). If you have a recent eComStation installation (e.g. 2.0 rc6) you will already have LxLite installed. Otherwise, you may take it from here: http://www.os2site.com/sw/util/archiver/lxlt133.zip After unpacking the GCC archive, you will have to set up the compiler environment by invoking gccenv.cmd from the bin subdirectory with the correct arguments (type gccenv.cmd -? for help). For the OpenWatcom linker, specify WLINK as the second argument. You will also need to perform the following steps: - Make sure the selected linker, the make utility and LxLite executable are in PATH. - Make sure CMD.EXE is your command line processor (the generated makefiles will rely on its 'copy', 'if' and other commands). If you have a Unix shell (SH.EXE) in your environment, you may need to force GNU make to use CMD.EXE by doing 'set MAKESHELL=C:\OS2\CMD.EXE' where C: is your boot drive. - set LIBRARY_PATH=C:\OS2\DLL;C:\MPTN\DLL where C: is your boot drive. - Make sure that there are no traces of any other Watcom or OpenWatcom installation in the environment where you build Qt as it will most likely interfere with the patched OpenWatcom linker we use. This basically means removing all *WATCOM* environment variables and removing references to those Watcom installations from PATH. Note that the QTDIR environment variable used by previous Qt versions is not used by Qt4 anymore (except two rare cases that do not affect the OS/2 platform anyway and are probably leftovers after the migration of the qmake feature specifications to Qt4). Therefore, there is no need to set this variable explicitly. See also a note below about hard-coded paths to the source tree. There is also no need to set the QMAKESPEC variable explicitly. If it is absent, qmake will use the specification stored in the /mkspecs/default directory, which on OS/2 always refers to the "os2-g++" specification, the only one supported at the present time. When the environment is set up, go to the directory where you unpacked the Qt4 source tree and type: configure.cmd This will set up the library (by creating necessary configuration and include files and a bunch of Makefiles for variuos components) and build the qmake utility. The next step is to go to the src subdirectory and type: make This will compile and link the library. Note that by default both the release and the debug version of the library are built (please be patient, it may take quite some time depending on your hardware). The release and debug libraries can co-exist in the same source tree and may be used in parallel: all the debug DLLs get a 'd' letter in their name preceeding the Qt major version number and use separate directories for object files. To save time, you may also build the release and the debug versions of the library separately by typing 'make release' or 'make debug' accordingly instead of just 'make'. 100 101 Once the library is successfully built, you may try to compile the demos 102 and examples by visiting the individual example subdirectories in the source 103 tree and typing 'qmake' followed by one of 'make', 'make release' or 104 'make debug' in that subdirectory. 105 106 NOTES: 107 108 1. Please keep in mind that due to dropping the QTDIR variable recognition, 109 qmake.exe now unconditionally uses hard-coded paths to locate various Qt4 110 components (such as the include or source directory) during the makefile 111 generation process and therefore if you move the Qt source tree to another 112 location you will need to run configure.cmd again in order to update these 113 hard-coded paths and rebuild qmake and other dependent parts of the 114 library. 115 116 2. This version of Qt for OS/2 includes the Extended system tray plugin for 117 XCenter/eCenter which is necessary to enable Qt support for the special 118 notification area on the XCenter/eCenter panel (called the "system tray") 119 which is used by many long-running applications to display their status. 120 In order to activate this support, you need to install this plugin to your 121 XCenter or eCenter. The plugin is built during the normal Qt build process 122 and can be found in the file \plugins\xcenter\xsystray.dll in the Qt source 123 tree. In order to install the plugin, do the following: 124 125 a. Copy xsystray.dll to \plugins\xcenter\ 126 (on eComStation, this will be C:\ecs\system\ewps\plugins\xcenter\ where 127 C: is your boot drive). 128 129 b. Restart WPS. 130 131 c. Add the "Extended system tray" widget to the XCenter/eCenter panel using 132 the XCenter context menu ('Create new widget'). 133 134 Note that if you upgrade from the previous version of the plugin then 135 please unlock xsystray.dll in the target folder using the UNLOCK.EXE 136 utility (which you can find in the LxLite package, for example) before 137 performing step a., otherwise the copy operation will fail. 138 139 140 141 CURRENT LIMITATIONS 142 143 1. configure.cmd is not yet capable to generate individual Makefiles for demos 144 and examples, it only generates the main Makefile that builds the library 145 and the necessary tools. Demos and examples can be compiled by hand 146 (as described above). 147 148 2. OS/2 bitmap fonts are not yet supported. Use TTF or Type1 (PFB) fonts with 149 Qt. 150 151 3. Make sure you have the LANG environment variable properly set. The format 152 is 'set LANG=ll_CC[.encoding]' where is the language code, is the 153 country code and is the optional encoding to use. If LANG is 154 missing or invalid, string conversion operations may work incorrectly 155 resulting in distorted text input or output. Note that for most languages 156 you will have to specify the encoding number explicitly because Qt and OS/2 157 usually disagree about the default encoding for the given language. 158 159 To specify the correct encoding for Qt you need to know your system code 160 page number. You can find this number in the COUNTRY statement of your 161 CONFIG.SYS. Note however that the code page number from CONFIG.SYS and the 162 encoding name you specify in LANG are different things. Qt doesn't 163 understand IBM code page numbers directly. In most cases, you can get the 164 encoding name by prepending 'cp' to the code page number (for example, 165 'cp850' for code page 850) but sometimes this will not work because not all 166 encodings have 'cp'-like aliases. In this case, you should google around to 167 find the correct encoding name for your code page number. Here is a couple 168 of examples of the proper LANG specification: 169 170 set LANG=de_DE.cp850 - for the German OS/2 locale 171 set LANG=ru_RU.cp866 - for the Russian OS/2 locale 172 173 Later, the correct encoding for the system code page will be detected 174 automatically and specifying it in LANG will not be necessary. 175 176 4. Some functionality of the already available Qt classes may be limited or 177 unimplemented. If you find such a case and there is no ticket for it 178 in the bug tracker, feel free to add one. 179 180 5. No qt3support module. This functionality is rarely necessary in mature 181 real life applications and has low priority. 182 183 6. No native PM style, but Qt will use fonts and colors from the current 184 OS/2 theme (hint: if your default OS/2 font is "WarpSans", install the 185 "Workplace Sans" TTF font from Alex Taylor to get more native look & feel). 186 Note that v0.5 of the font has known sizing and spacing problems and also 187 supports only the Latin1 code page. To avoid these problems, use v0.4 which 188 you can download here: 189 190 http://users.socis.ca/~ataylo00/creative/fonts/wpsu_ttf_04.zip 191 192 7. QProcess: when starting PM applications from text-mode applications and 193 when detaching applications with startDetached(), the returned PID is a 194 PID of the intermediate cmd.exe process, not the target application. 195 196 8. No QDesigner, no QAssistant. 197 198 9. No clipboard, no Drag&Drop, no printer support. See the project roadmap for 199 more information on the current progress and future plans: 200 201 http://svn.netlabs.org/qt4/roadmap 202 203 204 205 CHANGES 206 207 Beta 4 (11-11-2009) 208 209 Improvements: 210 211 - Added sound support (implemented QSound class). 212 213 - Added system tray support (QSystemTrayIcon class). This support requires 214 the Extended system tray XCenter plugin to be installed. See the note above 215 on how to compile and install this plugin. 216 217 - Enabled QPlugin support on OS/2. This in turn enables SVG support for 218 QIcon (which is built as a Qt plugin DLL by default). 219 220 - Better widget modality support (widgets blocked by modality cannot be 221 activated and moved using the mouse and the title bar anymore). 222 223 - Added support for 'console' and 'windows' CONFIG options in .pro files. 224 Now, if 'windows' is present, the target executable will have the WINDOWAPI 225 attribute set which effectively makes it a PM application. This, in 226 particular, disables standard input, output and error streams so that when 227 started, the application will not have a console window attached to it and 228 will not support input/output redirection operators on the command line. 229 By default, 'console' mode is active unless you perform a release build and 230 the application is linked against the QtGui library ('QT = gui' in .pro), 231 in which case the default is 'windows'. 232 233 - Improved paint speed in Qt windows which should increase overall graphical 234 UI performance by 10%-20% in Qt4 applications. 235 236 - Implemented setting window icons for top-level windows (using 237 QWidget::setWindowIcon()). 238 239 - Added LxLite support to provide compression for executables and DLLs. The 240 compression is controlled by the 'exepack' CONFIG option which is turned on 241 by default for release builds if the LxLite executable is present in PATH 242 during the configure.cmd invocation. The compression may be turned off on a 243 per-project basis by adding a 'CONFIG -= exepack' line to the .pro file. 244 245 - Improved the section of this README.OS2 file that describes how to properly 246 set the LANG variable to have correct national characters in file names and 247 in window titles of Qt applications. 248 249 Fixes: 250 251 - QProcess: The executable's path was not always added to BEGINLIBPATH. 252 253 - Fixed-size top-level widgets could not be moved. 254 255 - Application crash after pressing a button in a dialog window that resizes 256 this dialog (for example, makes it bigger to show more information). 257 258 - Resizing top level windows using the top border broke mouse coordinates so 259 that Qt tought you pressed the mouse button in a different place of the 260 window than where you actually did it. 261 262 - Events posted with QCoreApplication::postEvent() were only processed upon 263 receiving a next message from the system. This caused funny delays such as 264 controls in a Qt window still indicating the input focus (the dotted 265 rectangle) after the window was deactivated and losing this indication only 266 when the mouse pointer was moved over the window. 267 268 - Don't replay mouse button press on a push button that is showing a popup 269 menu but instead hide the popup menu and unpress the button to get more 270 native look and feel. 271 272 - Deactivating the window with a push button showing a popup menu would hide 273 the popup but leave the button pressed. 274 275 - Fixed incorrect Qt dirty widget region calculation when processing WM_PAINT 276 messages. This fixes a lot of redraw problems (menu items in the main menu 277 bar, text in combo-boxes, various redraw problems in smplayer when switching 278 interfaces and going to/from fullscreen, and similar). 279 280 Beta 3 (17-10-2009) 281 282 Improvements: 283 284 - Added proper font support. All outline (scalable) fonts visible in the Font 285 Palette should be now recognized by Qt. The fonts are hinted and antialiased 286 using the Freetype2 library when drawing text. 287 288 - System fonts and colors are now used by default for Qt widgets. 289 290 - configure.cmd now generates the main Makefile to simplify building of Qt. 291 292 - corelib: QProcess: Implemented child termination detection. 293 294 - corelib: QProcess: Implemented redirection to another QProcess. 295 296 - corelib: QProcess now uses native pipes for stream redirection. This fixes 297 various issues like 'Socket operation on non-socket' errors during 298 parent-child communication. 299 300 - corelib: QProcess: Make sure that the directory containing the executable 301 file is always searched (first) for DLLs needed by this executable. This 302 makes it unnecessary to change the current directory to the executable's 303 directory or add it to LIBPATH before starting the Qt application. 304 305 - corelib: QProcess can now start applications of different type (e.g. PM 306 applications from text-mode applications) directly. 307 QProcess::startDetached() also works. 308 309 - qmake: In debug_and_release mode, 'release-(all|clean|distclean|install| 310 uninstall)' and 'debug-(all|clean|distclean|install|uninstall)' make 311 targets are now available. 312 313 Fixes: 314 315 - Doing 'make clean' could result into a hang due to CMD.EXE command line 316 length limitation. 317 318 - corelib: Fixed: QProcess: Lost data during stream redirection. 319 320 - corelib: QSettings could sometimes distort data when saving it to the 321 registry (by replacing some characters with codes 0x80 and above with '?'). 322 323 Beta 2 (17-09-2009) 324 325 Improvements: 326 327 - Ported the network module (QtNetwork4.dll) and added to the default build. 328 329 - Added modules sql, svg, xmlpatterns, scripttools, plugins to the default 330 build. 331 332 - gui: Added recognition of dead keys which makes it possible to type 333 umlauts and other accented characters that require composition. 334 335 - gui: Implemented standard cursor shapes in Qt applications. 336 337 Fixes: 338 339 - qmake: Fixed the trailing slash problem which caused qmake to generate 340 incorrect makefiles and fail to build the Qt library on some platforms. 341 342 - configure.cmd: Return to the root source tree directory after building 343 qmake. 344 345 - qmake: Automatically use different link flags when linking qmake with WLINK. 346 347 - qmake: Recognize TARGET_SHORT that allows to specify a short DLL name 348 (vital for OS/2 which reqires DLL names to be in 8x3 format). 349 350 - build: Set short DLL names for Qt modules on OS/2 using TARGET_SHORT. 351 352 - corelib: Various fixes to file system classes that deal with the file name 353 case (which should be ignored on OS/2) and forward and back slashes. 354 355 - corelib: Fixed: QMutex could let more than one thread access the protected 356 resource. 357 358 - corelib: Standard stream redirection in QProcess should now work for 359 kLIBC-based child processes. Redirection for all other applications 360 (such as CMD.EXE) will be added later (seems to be a kLIBC bug/feature). 361 362 - gui: Fixed erroneous QFileDialog behavior (duplicate entires in the list, 363 incomplete contents of the root directory of the current drive). 364 365 - gui: Fixed: Ctrl+A..Z should generate characters with codes 0x01-0x1F. 366 367 - gui: Fixed: Close popups when resizing/moving the top level window. 368 369 - gui: Enabled actual enforcing min/max Qt widget constraints for top-level windows. 370 371 - gui: Fixed child widget duplication when resizing top level widgets after 372 showing a popup; moving native child widgets should now work correctly. 373 This also fixed a number of redraw problems (for example, drawing the main 374 menu and tool bars in smplayer, moving tool bars around in other 375 applications such as textedit from the demo folder). 376 377 Beta 1 (29-08-2009) 378 379 - First public release. 380 381 382 383 CREDITS 384 385 Dmitry A. Kuminov (development) 386 Silvan Scherrer (management) 387 388 netlabs.org (hosting & support) 389 390 Nokia Corporation (original Qt library) 391 392 We also want to THANK all individuals and organizations who made the donations 393 to this project and helped to make it happen. Please visit 394 395 http://qt.netlabs.org/en/site/index.xml 396 397 to get the full list of sponsors and to find information on how you can support 398 the project. 399 400 401 Qt is a trademark of Nokia Corporation and/or its subsidiary(-ies). 402 OS/2 and OS/2 Warp are trademarks of the IBM Corporation and/or its subsidiary(-ies). 403 eComStation is a trademark of Serenity Systems International and/or its subsidiary(-ies). 404 Etc.