doc/src/porting/qt4-mainwindow.qdoc
changeset 0 1918ee327afb
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the documentation of the Qt Toolkit.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 
       
    42 /*!
       
    43     \page qt4-mainwindow.html
       
    44     \title The Qt 4 Main Window Classes
       
    45 
       
    46     \contentspage {What's New in Qt 4}{Home}
       
    47     \previouspage The Scribe Classes
       
    48     \nextpage The New Qt Designer
       
    49 
       
    50     Qt 4 introduces a new set of main window classes that supersede the
       
    51     Qt 3 main window classes, providing a more efficient implementation
       
    52     while remaining easy to use.
       
    53 
       
    54     \tableofcontents
       
    55 
       
    56     \section1 Overview of the Main Window Classes
       
    57 
       
    58     The main window-related classes have been redesigned to satisfy a
       
    59     number of requirements, addressing issues raised by our customers and
       
    60     internal developers. The aim of this redesign is to provide a more
       
    61     consistent and efficient framework for main window management.
       
    62 
       
    63     \section1 The Main Window Classes
       
    64 
       
    65     Qt 4 provides the following classes for managing main windows and
       
    66     associated user interface components:
       
    67 
       
    68     \list
       
    69     \o QMainWindow remains the central class around which applications
       
    70        can be built. The interface to this class has been simplified, and
       
    71        much of the functionality previously included in this class is now
       
    72        present in the companion QDockWidget and QToolBar classes.
       
    73 
       
    74     \o QDockWidget provides a widget that can be used to create
       
    75        detachable tool palettes or helper windows. Dock widgets keep track
       
    76        of their own properties, and they can be moved, closed, and floated
       
    77        as external windows.
       
    78 
       
    79     \o QToolBar provides a generic toolbar widget that can hold a
       
    80        number of different action-related widgets, such as buttons,
       
    81        drop-down menus, comboboxes, and spin boxes. The emphasis on a
       
    82        unified action model in Qt 4 means that toolbars cooperate well
       
    83        with menus and keyboard shortcuts.
       
    84     \endlist
       
    85 
       
    86     \section1 Example Code
       
    87 
       
    88     Using QMainWindow is straightforward. Generally, we subclass
       
    89     QMainWindow and set up menus, toolbars, and dock widgets inside
       
    90     the QMainWindow constructor.
       
    91 
       
    92     To add a menu bar to the main window, we simply create the menus, and
       
    93     add them to the main window's menu bar. Note that the
       
    94     QMainWindow::menuBar() function will automatically create the menu bar
       
    95     the first time it is called. You can also call
       
    96     QMainWindow::setMenuBar() to use a custom menu bar in the main window.
       
    97 
       
    98     \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.qdoc 0
       
    99     \dots
       
   100     \snippet examples/mainwindows/menus/mainwindow.cpp 5
       
   101     \dots
       
   102 
       
   103     Once actions have been created, we can add them to the main window
       
   104     components. To begin with, we add them to the pop-up menus:
       
   105 
       
   106     \snippet examples/mainwindows/menus/mainwindow.cpp 10
       
   107     \dots
       
   108     \snippet examples/mainwindows/menus/mainwindow.cpp 11
       
   109     \dots
       
   110 
       
   111     The QToolBar and QMenu classes use Qt's action system to provide a
       
   112     consistent API. In the above code, some existing actions were added to
       
   113     the file menu with the QMenu::addAction() function. QToolBar also
       
   114     provides this function, making it easy to reuse actions in different
       
   115     parts of the main window. This avoids unnecessary duplication of work.
       
   116 
       
   117     We create a toolbar as a child of the main window, and add the desired
       
   118     actions to it:
       
   119 
       
   120     \snippet examples/mainwindows/sdi/mainwindow.cpp 0
       
   121     \dots
       
   122     \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.qdoc 1
       
   123 
       
   124     In this example, the toolbar is restricted to the top and bottom
       
   125     toolbar areas of the main window, and is initially placed in the
       
   126     top tool bar area. We can see that the actions specified by \c
       
   127     newAct and \c openAct will be displayed both on the toolbar and in
       
   128     the file menu.
       
   129 
       
   130     QDockWidget is used in a similar way to QToolBar. We create a
       
   131     dock widget as a child of the main window, and add widgets as children
       
   132     of the dock widget:
       
   133 
       
   134     \snippet doc/src/snippets/dockwidgets/mainwindow.cpp 0
       
   135 
       
   136     In this example, the dock widget can only be placed in the left and
       
   137     right dock areas, and it is initially placed in the left dock area. 
       
   138 
       
   139     The QMainWindow API allows the programmer to customize which dock
       
   140     widget areas occupy the four corners of the dock widget area. If
       
   141     required, the default can be changed with the
       
   142     QMainWindow::setCorner() function:
       
   143 
       
   144     \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.qdoc 2
       
   145 
       
   146     The following diagram shows the configuration produced by the above code.
       
   147     Note that the left and right dock widgets will occupy the top and bottom
       
   148     corners of the main window in this layout.
       
   149 
       
   150     \image mainwindow-docks-example.png
       
   151 
       
   152     Once all of the main window components have been set up, the central widget
       
   153     is created and installed by using code similar to the following:
       
   154 
       
   155     \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.qdoc 3
       
   156 
       
   157     The central widget can be any subclass of QWidget.
       
   158 
       
   159     \section1 What's Changed since Qt 3?
       
   160 
       
   161     The main window classes in Qt 4 adds new functionality, mainly to
       
   162     the dock widgets and toolbars. We have also made changes to the
       
   163     design of the framework.
       
   164 
       
   165     Although the QMainWindow class in Qt 3 provided support for
       
   166     toolbars, dock widgets, and other standard user interface
       
   167     components, its design meant that these items were managed
       
   168     through a large number of QMainWindow member functions. In Qt 4,
       
   169     the QMainWindow class delegates many of the management tasks to
       
   170     QDockWidget and QToolBar (allowing more consistent behavior to be
       
   171     defined and implemented).
       
   172 
       
   173     The dock widget and toolbar classes are now separated into
       
   174     independent classes. (write some more here)
       
   175 
       
   176     (It is intended that these changes allow more consistent behavior 
       
   177     to be defined and implemented (which? example). In
       
   178     response to feedback from customers, we hope to improve these classes 
       
   179     even further.)
       
   180 
       
   181     \section2 New Functionality
       
   182 
       
   183     Dock widgets are animated when docking or
       
   184     detaching from a dock area. The dock areas will also adjust their
       
   185     size to show where the dock widget will dock when it hovers over
       
   186     it. This animation can be turned off with \c setAnimated(). 
       
   187 
       
   188     By default, dock widgets are added to the dock areas in a single
       
   189     row. By setting nesting enabled with \c setDockNestingEnabled(),
       
   190     the widgets can be added both vertically and horizontally.
       
   191 
       
   192     Two dock widgets can occupy the same space in a dock area. The user
       
   193     can then choose which widget that is visible with a tab bar that
       
   194     is located below the widgets. The QMainWindow::tabifyDockWidget() 
       
   195     joins two tab widgets in such a tabbed dock area. (revise the
       
   196     entire paragraph)
       
   197 
       
   198     \section2 Independent QDockWidget And QToolBar Classes
       
   199 
       
   200     Toolbar and dock window functionality is provided by two independent
       
   201     classes: QToolBar and QDockWidget. Toolbars and dock widgets
       
   202     reside in separate areas, with toolbars outside the dock widget
       
   203     area. This behavior differs from the Qt 3 behavior, where
       
   204     QToolBar inherited functionality from QDockWidget, and both types of
       
   205     component shared the same areas. The result is a more consistent
       
   206     and predictable experience for users. Toolbars and dock widgets
       
   207     provide feedback while being dragged into their new positions.
       
   208 
       
   209     \image mainwindow-docks.png
       
   210 
       
   211     The diagram above shows the layout of a main window that contains both
       
   212     toolbars and dock widgets. Each corner area can be used by either
       
   213     of the adjacent dock widget areas, allowing dock widget behavior and
       
   214     main window layout to be specified precisely.
       
   215 
       
   216     Toolbars and dock widgets are child widgets of the main window. They
       
   217     are no longer reparented into a dock area widget by the main window.
       
   218     Instead, layouts are used to manage the placement of toolbars and dock
       
   219     widgets. One consequence is that the old QDockArea class is no
       
   220     longer required in Qt 4.
       
   221 
       
   222     \section2 Code Change Examples
       
   223 
       
   224     QMainWindow retains the menuBar() function, but menus are always
       
   225     constructed using QAction objects. All kinds of menus are
       
   226     constructed using the general QMenu class.
       
   227 
       
   228     Qt 3:
       
   229     \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.qdoc 4
       
   230     Qt 4:
       
   231     \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.qdoc 5
       
   232 
       
   233     Toolbars follow the same pattern as menus, with the new, more
       
   234     consistent behavior:
       
   235 
       
   236     Qt 3:
       
   237     \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.qdoc 6
       
   238     Qt 4:
       
   239     \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.qdoc 7
       
   240 
       
   241     The behavior of dock widgets is now configured through the member
       
   242     functions of QDockWidget. For example, compare the old and new ways
       
   243     of creating a dock widget in the dock area on the left hand side of the
       
   244     main window.
       
   245 
       
   246     In Qt 3:
       
   247     \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.qdoc 8
       
   248     In Qt 4:
       
   249     \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.qdoc 9
       
   250 */