This is my page ? ;) Hi I'm Zeljan Rikalo (everybody calls me Zeljko), currently trying to finish qt4 interface for lazarus. Any feedback about qt-lcl from linux,win32 or mac is welcome (patches also). All about Qt interface you can find at
- Mailing list: http://lists.lazarus.freepascal.org/mailman/listinfo/qt
- Blog about lazarus development http://lazarus-dev.blogspot.com/
- Nice explanation QImage vs. QPixmap graphic operations http://techbase.kde.org/Development/Tutorials/Graphics/Performance
- Qt environment variables: http://qtunderground.org/wiki/Qt_Environment_Variables
- 18.12.2011 - finnaly built qt 64bit (cocoa) lazarus on MacOSX, detailed explanation is here http://wiki.lazarus.freepascal.org/Qt_Interface_Mac
- 05.11.2011 - MDI support is added to laz trunk ... qt mdi is fully implemented.
- 21.11.2010 there are known problems with qt-4.7.XX (lazarus and qt based apps crashes).Seem that our bindings need -mstackrealign.
- 29.09.2009 as of lazarus r 21913 qt-4.5.XX is default , minimum bindings version is 1.72. No more USE_QT_XX defines
- 18.09.2008 Trolltech released qt-4.4.2. Changes: http://trolltech.com/developer/notes/changes/changes-4.4.2/
Fixed many bugs & regressions.
- 31.08.2008 I'm testing 4.4.X for about two weeks (4.4.2 snapshots currently - 4.4.1 have some nasty bugs).
It looks much better than 4.3.XX - no flickering, faster, fixed some ugly QPainter bugs, fixed event queue bug (now I reverted QEventFocusIn & QEventFocusOut into my local svn copy (svn r. 14361)). Lazarus IDE feels much better with 4.4.X than with 4.3.X. There's no special changes for 4.4, only r.14361 is out of game.
- 22.02.2008 Trolltech released qt-4.3.4. Changes: http://trolltech.com/developer/notes/changes/changes-4.3.4/
Fixes for QCoreApplication events, QComboBox crash fixed ...
- 05.12.2007 Trolltech released qt-4.3.3. Changes: http://trolltech.com/developer/notes/changes/changes-4.3.3/
QPainter supports justified text in overloaded QPainter::drawText() Fixes for QMainWindow, QMdiArea, QMdiSubWindow. Fixes QPixmap bug with scaling & shifting by half a pixel. Fixes for QFileDialog, QListView, QTreeView etc .... Looks like a nice update.
- 03.10.2007 Trolltech released qt-4.3.2. Changes: http://trolltech.com/developer/notes/changes/changes-4.3.2/
- 01.10.2007 I've compiled & used Lazarus Qt IDE on intel Mac. Screenshoot is here http://wiki.lazarus.freepascal.org/Image:macosxqt.png
- 07.08.2007 Trolltech released qt-4.3.1. Changes are here http://trolltech.com/developer/notes/changes/changes-4.3.1/
My TODO list
- Try to write an MDI "emulator" at LCL site based on TScrollView and TForm (mdiChild is real form embedded into TScrollView and custom painted title bar).With this emulator we'll get mdi support for all ws.
Current status: Trivial MDI Emulator works fine on all widgetsets I can test: gtk2, carbon, win32, qt.
- MDI viewport (TScrollBox)
- MDI window.
- Minimize, Restore, Maximize, Move works.
- Tab order inside each MDI window belongs to itself.
- Reordering of minimized MDI children when minimized MDI child is closed.
Missing features to implement:
- resizing of MDI window by mouse (in progress).
when many MDI's minimized, and one of them restored, maximized or closed, reorder other minimized mdi's (in progress).
- cascade, tile ops.
- add missing code to TCustomForm (mainly reparent to MDI viewport when form created) and to interfaces.
- implement win32 native MDI's
- add MDI menu (when MDI window maximized).
- fix bugs ? ;)
- MDI Emulator with Gtk
- MDI Emulator with Gtk2
- MDI Emulator with Win32 under wine .This is just test case since win32 should have native implementation.
KNOWN BUGS IN QT-4.5.3 - (visible in LCLQt)
Plastique,Cleanlooks style - combobox, checkbox doesn't show focus rect when focused by pressing ENTER and SelectNext(ActiveControl, True, True) from another control (TAB KEY WORKS OK) - have patch for Qt.fixed as of qt-4.6.0
- WindowsXP style - checkbox doesn't show focus rect for same reason as Plastique checkbox. - have patch for Qt.
QStatusBar - size grip & last item isn't visible (if we have few items) if our main window started as wsMaximized. Issue submitted to Qt http://bugreports.qt.nokia.com/browse/QTBUG-4334fixed with qt >= 4.6.2.
TODO FOR NEXT QT BINDINGS RELEASE - BASED ON MINIMUM Qt-4.6 (reminder for Den Jean)
- Add next classes: QDesktopServices (Felipe asked), QTextBlock, QTextBlockFormat, QTextFormat, QTextLayout, QTextLine, QShortcut, QGesture, QGestureEvent, QGestureRecognizer, QPanGesture, QPinchGesture, QTapAndHoldGesture, QTapGesture, QSwipeGesture, QTouchEvent, QStylePainter (have some convinience functions for styled painting, also QStylePainter is initialized from widget).
- Maybe add OpenGL (QGLxxxx classes), but only if it can be separated in different unit and different C bindings, so loaded only on demand (for lazarus TOpenGLControl). See http://bugs.freepascal.org/view.php?id=15589 .
- Maemo bindings - support for Maemo platform.
- QGraphics*** - check what's missing for complete painting and use of QGraphicsItems.
Painting of qt controls with HasPaint=FALSE inside qtlcl
- procedure SlotPaint() should be function SlotPaint() with Result from paint message eg. Result := Msg.Result <> 0;
That says that qt will not paint that control (event filter resulted with True result).This works as expected, but not sure about impact on qt or bindings when setting result to true in such way - must test it.
- This is example of overrided TQtLineEdit.EventFilter.Don't forget to change SlotPaint() into function
and add Result := Msg.Result <> 0; after you process paint event.
function TQtLineEdit.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; begin Result := False; if LCLObject = nil then exit; // TQtLineEdit have HasPaint := False, so only qt draws it // but we can do whatever here if (QEvent_type(Event) = QEventPaint) then begin BeginEventProcessing; // eg. this makes default qt paint of our control // after this call we can do something more inside our SlotPaint // and set result to true. // As a result we have native control on screen with eg.small red triangle in // controls corner which we painted after control was painted by qt. // If we don't set Result to true in this case, our control will be // repainted by qt again ,and we wan't see small red triangle in corner // of our control. // if SomeFlagOnOurControl then // begin // QObject_event(Widget, Event); // SlotPaint(Sender, Event) // Result := True; // end else // begin // In this case: if result of SlotPaint is false - qt draws control, otherwise // we already done that. Result := SlotPaint(Sender, Event); QEvent_setAccepted(Event, not Result); EndEventProcessing; // end end else Result:=inherited EventFilter(Sender, Event); end;