    * 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
