Qt 3.1 introduces many significant new features and many improvements
over the 3.0.x series. For an overview of the main changes between
3.0.x and 3.1, look at the changes-3.1.0-b1 file. This file describes
the changes between Qt 3.1 beta1 and Qt 3.1 beta2.


****************************************************************************
*			    General					   *
****************************************************************************

The binary incompatibilities that were introduced in Qt 3.1 beta1
have been fixed.

****************************************************************************
*			   Library					   *
****************************************************************************

- QAction
	Don't update when nothing has changed.

- QActionGroup
	Syncronize comboboxes correctly for groups with
	separators. Set the initial currentItem of comboboxes to the
	action that is on when adding the group. Emit activated signal
	for non-toggle actions selected from a combobox. Apply the
	state of the action group for new widgets.

- QApplication
	Correctly set the accept() flag on accel events. Obsoleted
	processOneEvent(), we have a better way for integrating
	eventloops now. (See QEventLoop's documentation.)
	Windows only: reserve more space for very long application
	filenames.

- QCheckTableItem
	Use the colorgroup passed in for the background color and not
	the viewport's.

- QColor
	Windows only: Fix palette allocation and ManyColor mode on
	Windows.

- QComboBox
	Emit activated() signals from the wheel event handler.

- QComboTableItem
	Make sure stringlist is updated even if setStringList() is
	called while an editor exists.

- QDataTable
	Windows only: If edit confirmation was switched on and
	the user cancelled an update by clicking in a different field,
	the current row was needlessly changed.

- QDateTimeEdit/QTimeEdit
	Now supports wraparound for time editing.
	
- QDesktopWidget
	Windows only: Allow explicit creation of QDesktopWidgets.

- QDns
	Fix a crash when a QDns object is deleted in a slot connected
	to its resultsReady() signal.

- QDockWindow
	Windows only: Don't pass window activation around
	unnecessarily when the activation is ignored anyway. Also
	fixed repaint errors while dragging dock windows. Remove
	floating windows from the mainwindow's internal lists when
	deleting.

- QEventLoop
	Renamed processNextEvent(flags,bool) to processEvents(flags)
	and introduced new ProcessEvents flag, WaitForMore. Remove
	processOneEvent since it is redundant.

- QFileDialog
	Windows only: Disable NTFS permission lookup during filedialog
	population. This can take a long time, and the information is
	not really required.

- QGLContext
	Added a workaround to get overlays to work on ATi FireGL
	cards.

- QGLWidget
	Added support for rendering text into a GL context with the
	renderText() calls.

- QHeader
	Draw the sort arrow at the right position with multi-line
	header labels. Scale the correct sections when the header
	sections are reordered. Respect orientation() in sizeHint().

- qHeapSort()
	Fixed to only require operator<, instead of a mix of
	operator<, <=, and >.

- QIconView
	Optimize updates on focus/window activation changes.

- QLibrary
	Windows only: only append ".dll" extension if no extension has
	been provided.

- QListBox
	Don't call ensureCurrentVisible() in resizeEvent() unless the
	current item was visible when you started resizing.

- QListView
	Don't draw the cell if the cell wouldn't be visible due to
	having a width or height of 0. Don't call cancelRename() when
	the rename was OK'd. When showing a tooltip make sure it's
	only for that column and not for the whole item.

- QMacStyle
	Many improvements to follow the native style more closely.

- QMainWindow
	Close all floating dockwindows of the mainwindow in the close
	event.

- QMenuData
	Make removeItem(int id) work on trees like the other functions
	that take IDs as arguments.

- QObject
	Make sender() a safer function to use:
	- it cannot be dangling anymore (points to 0 if the sender was
	  deleted or disconnected)
	- it maintains its value after other signals have been emitted
	Fixed compatibility problem in connect(). Remove quadratic
	behaviour in insertChild()

- QPicture
	Proper streaming for null pictures.

- QPixmap
	X11 only: allow grabWindow() to work on a screen other than
	the default screen.

- QPopupMenu
	Draw submenu items disabled if the submenu is disabled. Fix
	null-pointer dereferencing for dynamically changing menus.

- QProcess
	Windows only: make the tryTerminate() function work for
	windows applications (it still does not work for
	consoleapplications, though).

- QSocket
	Don't crash if the readBlock() returned 0.

- QSplitter
	addWidget() now reparents the widget if necessary.

- QTable
	Set the table of the item to the table in insertItem(), so
	takeItem()/insertItem() can be used to move items between
	tables.

- QWidget
	Clear WDestructiveClose before calling deleteLater() on
	widgets. Event processing during destruction might otherwise
	have another close event come along, which would issue another
	deleteLater() call. Added a new function toggleShowHide(bool show).
	Simplified visible() handling and added a convenience property
	"shown" and a write function for "hidden". Save WFlags in
	showFullScreen() and restore them so flags are remembered
	correctly.

- QWindowsStyle
	Make the Windowsstyle obey the system's scrollbar widths.

- qUncompress()
	Don't hang forever if the expected size passed in is 0. Return
	an empty bytearray if something went wrong instead of garbage
	data.




****************************************************************************
*			   Qt Designer					   *
****************************************************************************

- Improved the look of the Toolbox

- Many small usibility improvements in the special editors for widgets
  (drag'n'drop, in-place renaming, etc.).

- New icon look.

- Accept class names with "::" and generate correct namespace code in
  uic.

- Reduced startup time.

- Fixed a crash when loading .ui files using QWidgetFactory.

- Cleaned up some old dialogs and removed obsolete settings.

- Improved the .dlg import plugin.

- Button text properties can be edited in a multi-line editor now,
  since all buttons support multi-line labels.

****************************************************************************
*			   Qt Assistant					   *
****************************************************************************

- Added commandline option -removeContentFile.

- New icon look.

****************************************************************************
*			   Qt Linguist					   *
****************************************************************************

- New icon look.
