Here is a list of (major) changes in Qt from 0.96 to 0.98.
As usual, we fixed some bugs and improved the documentation.


*************** Changes that might affect runtime behavior *****************

QWidget:
--------
  setMinimumSize() and setMaximumSize() now force the widget to 
  a legal size.  resize() and setGeometry() obey the widget's
  minimum/maximum size.

  The default behaviour of QWidget::closeEvent is now to hide the widget,
  not to delete it as before (which was potentially dangerous). This means
  that if you have a top level widget and the user closes it via the close
  box, it will now hide itself if you have not reimplemented closeEvent().
  See the QWidget::closeEvent() and QCloseEvent documentation for details.

  (There are other changes in QWidget, see below)


*************** Changes that might generate compile errors *****************
**************           when compiling old code           *****************

Disabled copy constructors and operators=
----------------------------------------- 
  Copy constructors and operators= are disabled in the classes that cannot
  be copied (this includes all classes that inherit from QObject). This
  will let the compiler find bugs in your code, you'll get compile time 
  errors where you most probably would have gotten core dumps before. 
  This change has been done in the following classes:

    QAccel QApplication QBuffer QButton QButtonGroup QCheckBox QClipboard
    QComboBox QConnection QDataStream QDialog QFile QFileDialog QFrame
    QGroupBox QIODevice QImageIO QLCDNumber QLabel QLineEdit QListBox
    QMenuBar QMenuData QMenuItem QMessageBox QMetaObject QObject
    QPSPrinter QPaintDevice QPainter QPicture QPopupMenu QPrintDialog
    QPrinter QPushButton QRadioButton QRangeControl QScrollBar QSignal
    QSocketNotifier QTableView QTextStream QTimer QWidget QWindow

  The other classes all have sensible copy constructors and operators=.

QDate:
------
  These were protected, now private:
	static const char *monthNames[];
 	static const char *weekdayNames[];
	uint  	 jd;

QListBox:
---------
  The internals of QListBox are completely reworked. Definition of custom
  QListBoxItems is now much easier. This is *not* compatible with the old
  way of defining custom QLBItems. See the QListBoxItem documentation for
  details.

QTime:
------
  This was protected, now private:
	uint   ds;

*************** Type changes that might generate warnings: *****************

none

*****************         Obsoleted functions         **********************

none

***************** All other changes from 0.96 to 0.98 **********************

moc:
----
  Moc previously gave a syntax error when the word "class" was found
  in a string outside a class declaration. This bug has now been
  fixed.

  More moc arguments, check the manpage for details.

QFont:
------
  Two new convenience functions; bold() and setBold().

QLabel:
-------
  setMargin() and margin() are new. setMargin() specifies a minimum margin
  when the label contents are justified.

QWidget:
--------
  You can specify a custom widget frame for top level widgets, including
  no frame at all. See the widget constructor doc. for details.

  Qt now has enter and leave events. Reimplement the virtual functions  
  void enterEvent( QEvent * ) and void leaveEvent( QEvent * ) to receive
  events when the mouse cursor leaves or enters the visible part of the
  widget.

