doc/src/files-and-resources/resources.qdoc
branchRCL_3
changeset 7 3f74d0d4af4c
equal deleted inserted replaced
6:dee5afe5301f 7:3f74d0d4af4c
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2010 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     \group io
       
    44     \title Input/Output and Networking
       
    45     \ingroup groups
       
    46 
       
    47     \brief Classes providing file input and output along with directory and
       
    48     network handling.
       
    49 
       
    50     These classes are used to handle input and output to and from external
       
    51     devices, processes, files etc. as well as manipulating files and directories.
       
    52 */
       
    53 
       
    54 /*!
       
    55     \page resources.html
       
    56     \title The Qt Resource System
       
    57 
       
    58     \keyword resource system
       
    59 
       
    60     The Qt resource system is a platform-independent mechanism for
       
    61     storing binary files in the application's executable. This is
       
    62     useful if your application always needs a certain set of files
       
    63     (icons, translation files, etc.) and you don't want to run the
       
    64     risk of losing the files.
       
    65 
       
    66     The resource system is based on tight cooperation between \l qmake,
       
    67     \l rcc (Qt's resource compiler), and QFile. It obsoletes Qt 3's
       
    68     \c qembed tool and the
       
    69     \l{http://qt.nokia.com/doc/qq/qq05-iconography.html#imagestorage}{image
       
    70     collection} mechanism.
       
    71 
       
    72     \section1 Resource Collection Files (\c{.qrc})
       
    73 
       
    74     The resources associated with an application are specified in a
       
    75     \c .qrc file, an XML-based file format that lists files on the
       
    76     disk and optionally assigns them a resource name that the
       
    77     application must use to access the resource.
       
    78 
       
    79     Here's an example \c .qrc file:
       
    80 
       
    81     \quotefile mainwindows/application/application.qrc
       
    82 
       
    83     The resource files listed in the \c .qrc file are files that are
       
    84     part of the application's source tree. The specified paths are
       
    85     relative to the directory containing the \c .qrc file. Note that
       
    86     the listed resource files must be located in the same directory as
       
    87     the \c .qrc file, or one of its subdirectories.
       
    88 
       
    89     Resource data can either be compiled into the binary and thus accessed
       
    90     immediately in application code, or a binary resource can be created
       
    91     and at a later point in application code registered with the resource
       
    92     system.
       
    93 
       
    94     By default, resources are accessible in the application under the
       
    95     same name as they have in the source tree, with a \c :/ prefix.
       
    96     For example, the path \c :/images/cut.png would give access to the
       
    97     \c cut.png file, whose location in the application's source tree
       
    98     is \c images/cut.png. This can be changed using the \c file tag's
       
    99     \c alias attribute:
       
   100 
       
   101     \snippet doc/src/snippets/code/doc_src_resources.qdoc 0
       
   102 
       
   103     The file is then accessible as \c :/cut-img.png from the
       
   104     application. It is also possible to specify a path prefix for all
       
   105     files in the \c .qrc file using the \c qresource tag's \c prefix
       
   106     attribute:
       
   107 
       
   108     \snippet doc/src/snippets/code/doc_src_resources.qdoc 1
       
   109 
       
   110     In this case, the file is accessible as \c
       
   111     :/myresources/cut-img.png.
       
   112 
       
   113     Some resources, such as translation files and icons, many need to
       
   114     change based on the user's locale. This is done by adding a \c lang
       
   115     attribute to the \c qresource tag, specifying a suitable locale
       
   116     string. For example:
       
   117 
       
   118     \snippet doc/src/snippets/code/doc_src_resources.qdoc 2
       
   119 
       
   120     If the user's locale is French (i.e., QLocale::system().name() returns
       
   121     "fr_FR"), \c :/cut.jpg becomes a reference to the \c cut_fr.jpg
       
   122     image. For other locales, \c cut.jpg is used.
       
   123 
       
   124     See the QLocale documentation for a description of the format to use
       
   125     for locale strings.
       
   126 
       
   127 
       
   128     \section2 External Binary Resources
       
   129 
       
   130     For an external binary resource to be created you must create the resource
       
   131     data (commonly given the \c .rcc extension) by passing the -binary switch to
       
   132     \l rcc. Once the binary resource is created you can register the resource
       
   133     with the QResource API.
       
   134 
       
   135     For example, a set of resource data specified in a \c .qrc file can be
       
   136     compiled in the following way:
       
   137 
       
   138     \snippet doc/src/snippets/code/doc_src_resources.qdoc 3
       
   139 
       
   140     In the application, this resource would be registered with code like this:
       
   141 
       
   142     \snippet doc/src/snippets/code/doc_src_resources.qdoc 4
       
   143 
       
   144     \section2 Compiled-In Resources
       
   145 
       
   146     For a resource to be compiled into the binary the \c .qrc file must be
       
   147     mentioned in the application's \c .pro file so that \c qmake knows
       
   148     about it. For example:
       
   149 
       
   150     \snippet examples/mainwindows/application/application.pro 0
       
   151 
       
   152     \c qmake will produce make rules to generate a file called \c
       
   153     qrc_application.cpp that is linked into the application. This
       
   154     file contains all the data for the images and other resources as
       
   155     static C++ arrays of compressed binary data. The \c
       
   156     qrc_application.cpp file is automatically regenerated whenever
       
   157     the \c .qrc file changes or one of the files that it refers to
       
   158     changes. If you don't use \c .pro files, you can either invoke
       
   159     \c rcc manually or add build rules to your build system.
       
   160 
       
   161     \image resources.png Building resources into an application
       
   162 
       
   163     Currently, Qt always stores the data directly in the executable,
       
   164     even on Windows and Mac OS X, where the operating system provides
       
   165     native support for resources. This might change in a future Qt
       
   166     release.
       
   167 
       
   168     \section1 Using Resources in the Application
       
   169 
       
   170     In the application, resource paths can be used in most places
       
   171     instead of ordinary file system paths. In particular, you can
       
   172     pass a resource path instead of a file name to the QIcon, QImage,
       
   173     or QPixmap constructor:
       
   174 
       
   175     \snippet examples/mainwindows/application/mainwindow.cpp 21
       
   176 
       
   177     See the \l{mainwindows/application}{Application} example for an
       
   178     actual application that uses Qt's resource system to store its
       
   179     icons.
       
   180 
       
   181     In memory, resources are represented by a tree of resource
       
   182     objects. The tree is automatically built at startup and used by
       
   183     QFile for resolving paths to resources. You can use a QDir initialized
       
   184     with ":/" to navigate through the resource tree from the root.
       
   185 
       
   186     Qt's resources support the concept of a search path list. If you then
       
   187     refer to a resource with \c : instead of \c :/ as the prefix, the
       
   188     resource will be looked up using the search path list. The search
       
   189     path list is empty at startup; call QDir::addSearchPath() to
       
   190     add paths to it.
       
   191 
       
   192     If you have resources in a static library, you might need to
       
   193     force initialization of your resources by calling \l
       
   194     Q_INIT_RESOURCE() with the base name of the \c .qrc file. For
       
   195     example:
       
   196 
       
   197     \snippet doc/src/snippets/code/doc_src_resources.qdoc 5
       
   198 
       
   199     Similarly, if you must unload a set of resources explicitly
       
   200     (because a plugin is being unloaded or the resources are not valid
       
   201     any longer), you can force removal of your resources by calling
       
   202     Q_CLEANUP_RESOURCE() with the same base name as above.
       
   203 */