010f38d15963fa589ff813500189d2210f0912ff
* contrib/hbqt/generator/hbqtgen.prg
! Modified TO implement destructors IN a different way.
* contrib/hbqt/qth/QAbstractItemModel.qth
+ Added more CLASS members.
* contrib/hbqt/hbqt.ch
* contrib/hbqt/hbqt.h
* contrib/hbqt/hbqt_slots.cpp
* contrib/hbqt/hbqt_slots.h
* contrib/hbqt/moc_slots.cpp
+ Added more members plus re-worked event management to support multi-threads
and multi-windows in a different perspective. It is an effort to locate where
Harbour's Qt implementation is buggy with respect to ever increasing memory usage
plus Qt's Paint Engine which appears to be dependant on thread's idle time.
[ This is the way I preceive this fact ]
* contrib/hbqt/QAbstractButton.cpp
* contrib/hbqt/QAbstractItemModel.cpp
* contrib/hbqt/QAbstractItemView.cpp
* contrib/hbqt/QAbstractListModel.cpp
* contrib/hbqt/QAbstractScrollArea.cpp
* contrib/hbqt/QAbstractSlider.cpp
* contrib/hbqt/QAbstractSpinBox.cpp
* contrib/hbqt/QAbstractTableModel.cpp
* contrib/hbqt/QAction.cpp
* contrib/hbqt/QApplication.cpp
* contrib/hbqt/QBitmap.cpp
* contrib/hbqt/QBoxLayout.cpp
* contrib/hbqt/QBrush.cpp
* contrib/hbqt/QButtonGroup.cpp
* contrib/hbqt/QCalendarWidget.cpp
* contrib/hbqt/QColor.cpp
* contrib/hbqt/QColorDialog.cpp
* contrib/hbqt/QComboBox.cpp
* contrib/hbqt/QCoreApplication.cpp
* contrib/hbqt/QCursor.cpp
* contrib/hbqt/QDateTime.cpp
* contrib/hbqt/QDesktopWidget.cpp
* contrib/hbqt/QDial.cpp
* contrib/hbqt/QDialog.cpp
* contrib/hbqt/QDir.cpp
* contrib/hbqt/QDirModel.cpp
* contrib/hbqt/QDockWidget.cpp
* contrib/hbqt/QDragMoveEvent.cpp
* contrib/hbqt/QErrorMessage.cpp
* contrib/hbqt/QEvent.cpp
* contrib/hbqt/QEventLoop.cpp
* contrib/hbqt/QFileDialog.cpp
* contrib/hbqt/QFileSystemModel.cpp
* contrib/hbqt/QFocusFrame.cpp
* contrib/hbqt/QFont.cpp
* contrib/hbqt/QFontComboBox.cpp
* contrib/hbqt/QFontInfo.cpp
* contrib/hbqt/QFontMetrics.cpp
* contrib/hbqt/QFontMetricsF.cpp
* contrib/hbqt/QFormLayout.cpp
* contrib/hbqt/QFrame.cpp
* contrib/hbqt/QFtp.cpp
* contrib/hbqt/QGridLayout.cpp
* contrib/hbqt/QGroupBox.cpp
* contrib/hbqt/QHBoxLayout.cpp
* contrib/hbqt/QHeaderView.cpp
* contrib/hbqt/QHttp.cpp
* contrib/hbqt/QIcon.cpp
* contrib/hbqt/QImage.cpp
* contrib/hbqt/QImageReader.cpp
* contrib/hbqt/QImageWriter.cpp
* contrib/hbqt/QInputDialog.cpp
* contrib/hbqt/QIODevice.cpp
* contrib/hbqt/QKeyEvent.cpp
* contrib/hbqt/QKeySequence.cpp
* contrib/hbqt/QLabel.cpp
* contrib/hbqt/QLayoutItem.cpp
* contrib/hbqt/QLCDNumber.cpp
* contrib/hbqt/QLineEdit.cpp
* contrib/hbqt/QList.cpp
* contrib/hbqt/QListView.cpp
* contrib/hbqt/QListWidget.cpp
* contrib/hbqt/QListWidgetItem.cpp
* contrib/hbqt/QMainWindow.cpp
* contrib/hbqt/QMenu.cpp
* contrib/hbqt/QMenuBar.cpp
* contrib/hbqt/QMessageBox.cpp
* contrib/hbqt/QModelIndex.cpp
* contrib/hbqt/QMouseEvent.cpp
* contrib/hbqt/QMoveEvent.cpp
* contrib/hbqt/QObject.cpp
* contrib/hbqt/QPaintDevice.cpp
* contrib/hbqt/QPainter.cpp
* contrib/hbqt/QPalette.cpp
* contrib/hbqt/QPen.cpp
* contrib/hbqt/QPicture.cpp
* contrib/hbqt/QPixmap.cpp
* contrib/hbqt/QPoint.cpp
* contrib/hbqt/QPrintDialog.cpp
* contrib/hbqt/QPrintEngine.cpp
* contrib/hbqt/QPrinter.cpp
* contrib/hbqt/QPrintPreviewDialog.cpp
* contrib/hbqt/QProcess.cpp
* contrib/hbqt/QProgressDialog.cpp
* contrib/hbqt/QPushButton.cpp
* contrib/hbqt/QRect.cpp
* contrib/hbqt/QRectF.cpp
* contrib/hbqt/QRegion.cpp
* contrib/hbqt/QResource.cpp
* contrib/hbqt/QScrollArea.cpp
* contrib/hbqt/QScrollBar.cpp
* contrib/hbqt/QSignalMapper.cpp
* contrib/hbqt/QSize.cpp
* contrib/hbqt/QSizeF.cpp
* contrib/hbqt/QSizeGrip.cpp
* contrib/hbqt/QSlider.cpp
* contrib/hbqt/QSound.cpp
* contrib/hbqt/QSplashScreen.cpp
* contrib/hbqt/QSplitter.cpp
* contrib/hbqt/QStandardItem.cpp
* contrib/hbqt/QStandardItemModel.cpp
* contrib/hbqt/QStatusBar.cpp
* contrib/hbqt/QStyle.cpp
* contrib/hbqt/QStyledItemDelegate.cpp
* contrib/hbqt/QStyleOption.cpp
* contrib/hbqt/QSystemTrayIcon.cpp
* contrib/hbqt/QTabBar.cpp
* contrib/hbqt/QTableView.cpp
* contrib/hbqt/QTableWidget.cpp
* contrib/hbqt/QTableWidgetItem.cpp
* contrib/hbqt/QTabWidget.cpp
* contrib/hbqt/QTextBoundaryFinder.cpp
* contrib/hbqt/QTextCursor.cpp
* contrib/hbqt/QTextDecoder.cpp
* contrib/hbqt/QTextDocument.cpp
* contrib/hbqt/QTextDocumentFragment.cpp
* contrib/hbqt/QTextDocumentWriter.cpp
* contrib/hbqt/QTextEdit.cpp
* contrib/hbqt/QTextEncoder.cpp
* contrib/hbqt/QTextFormat.cpp
* contrib/hbqt/QTextFrame.cpp
* contrib/hbqt/QTextLayout.cpp
* contrib/hbqt/QTextStream.cpp
* contrib/hbqt/QTimer.cpp
* contrib/hbqt/QToolBar.cpp
* contrib/hbqt/QToolBox.cpp
* contrib/hbqt/QToolButton.cpp
* contrib/hbqt/QTreeView.cpp
* contrib/hbqt/QTreeWidget.cpp
* contrib/hbqt/QTreeWidgetItem.cpp
* contrib/hbqt/QUrl.cpp
* contrib/hbqt/QVariant.cpp
* contrib/hbqt/QVBoxLayout.cpp
* contrib/hbqt/QWebHistoryInterface.cpp
* contrib/hbqt/QWebHistoryItem.cpp
* contrib/hbqt/QWebHitTestResult.cpp
* contrib/hbqt/QWebPage.cpp
* contrib/hbqt/QWebPluginFactory.cpp
* contrib/hbqt/QWebSecurityOrigin.cpp
* contrib/hbqt/QWebView.cpp
* contrib/hbqt/QWidget.cpp
* contrib/hbqt/QWidgetAction.cpp
* contrib/hbqt/QWindowsStyle.cpp
* contrib/hbqt/QWindowsXPStyle.cpp
* contrib/hbqt/QWizard.cpp
* contrib/hbqt/TQAbstractItemModel.prg
! Result of change in implemention of destructors in hbqtgen.prg.
[ In this commit I had concentrated on two pit-falls which may
certainly prevent Qt's efficacy in Habour applications:
1. Ever-growing memory usage.
2. GPF in multi-threaded multi-windows
Though I have tried my level best to pin-point where memory usage
keeps up growing, I could not find anything worth control. I changed the
way destructors were implemented before, but that also seems to be
insufficent. But as we have better control over the events, some
of you will be able to locate what exactly is the problem.
GPF in multi-threaded multi-window scenario is caused by PAINT event
which produces GPF is CPU is not released momentarily for that thread.
So I inserted hb_idleSleep( 0.2 ) in the code where PAINT event is about
to be returning, and the GPF went away. But this insertion has a greater
damaging effect that it slows down the application considerably as
with each single keystroke, appln becomes idle for that much period.
I have guarded this under QT_EXECUTE_IN_THREADS constant for now.
If you want to play with this feature than compile HBQT with it
and then open <Dialogs><One more instance> menu option. Do not
bother about how slow appln executes but simply open as mamny
dialogs as you want and navigate different components.
NOTE: you may require to increase nMilliSeconds in hb_idleSleep( 0.2 )
from 0.2 to 0.5 as this value is heavily CPU dependant.
Hope someone will be able to locate exact fixes to above two issues. ]
Description
Harbour Core — Reference source for Five development
Languages
C
80.3%
xBase
17.8%
Makefile
0.6%
C++
0.4%
Harbour
0.4%
Other
0.3%