    * fix QWSPointerCalibrationData::devPoints and qwsServer
    * Fix QMenu::addAction(QAction *) overload, "using" etc.
    * fix space between two tables using <p></p>
    * qpixmap-qt3.html; remove 8 public functions inherited from QPaintDevice
    * \variable array
    * Added support for parameterless macros (e.g. \macro Q_OBJECT).
    * Made qdoc stricter regarding the data types (e.g. can't use \enum to document a typedef).
    * Parse QT_MODULE() macro and generate proper warnings for the various editions.
    * Fix parsing of \image following \value (e.g. qt.html).
    * Don't turn X11 and similar names into links.
    * Added automatic links from getters to setters and vice versa.
    * Support \module and show which module each class is from.
    * Fix occasional crash caused by misuse of const_cast().
    * Provide clearer error messages when resolves fail.




CHECK:

  * Identify editions
  * Automatic \sa getter setter
  * \macro Q_OBJECT

MUST HAVES:

  * resolve [gs]etters for \sa using base class

  * fix \overload when one is a signal and the other a normal function
  * use "project" for .dcf files
  * functions.html: include the types from QtGlobal as well as the functions (whatever that means)

  * nice template function/class syntax
  * spellchecker: built-in vs. builtin

  * verbose mode for functions that don't exist
  * No links to Porting Guide sections (e.g. QStringList)
  * link toggled(bool)
  * autolink foo(1)
  * handle using correctly
  * QObject "reentrant" list: duplicates
  * operator<< \overload
  * \compat \overload
  * qWarning() link
  * operator<<() autolink

  * get rid of spurious 'global' functions
  * Make automatic links in code work

  * Fix encoding bug (see Important email from Simon Hausmann)
  * Make links to QFoo::bar().baz() work
  * Fix automatic links in \sectionX (e.g. qt4-getting-started.html)
  * Provide a "List of all properties" page.

  * expand QObjectList -> QList<QObject *>
  * warning for unnamed parameters in property access functions
  * \center...\endcenter

LINKS:

  * explanation following nonstandard wording warning

  * omit \overload in operator<< and operator>>
  * make operator-() unary and binary independent functions (no \overload)
  * fix \overload
  * fix \legalese
  * remove warning for undocumented enum item like QLocale::LastLanguage
  * improve the \a warnings for overloads; if one overload documents a para, fine

  * implement \sidebar

  * implement \legalesefile

  * show in which module each class is
  * list namespaces, list header files


NICE FEATURES:
  * implement inheritance tree for each class (as a PNG)
  * avoid <p>...</p> in table/item cells without relying on horrible kludge
  * prevent macros from having same name as commands
  * be smart about enum types Foo::Bar vs. Bar when comparing functions
  * be smart about const & non-const when comparing functions

OTHER:
  * make qdoc run faster
  * make sure \headerfile works even if specified after \relates
