doc/src/examples/delayedencoding.qdoc
branchRCL_3
changeset 8 3f74d0d4af4c
equal deleted inserted replaced
6:dee5afe5301f 8: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     \example draganddrop/delayedencoding
       
    44     \title Delayed Encoding Example
       
    45 
       
    46     The Delayed Encoding example shows how to delay preparing of data
       
    47     for drag and drop operations until a drop target is found.
       
    48 
       
    49     \image delayedecoding-example.png
       
    50 
       
    51     The \gui Export push button is pressed down to start the drag.
       
    52     The data for the drag and drop operation is not processed until
       
    53     the user of the application has found a valid drop target. This
       
    54     removes redundant processing if the operation is aborted. In our
       
    55     case, we have an SVG image that we wish to send as the \c {
       
    56     "image/png" } MIME type. It is the conversion from SVG to PNG we
       
    57     wish to delay - it can be quite expensive.
       
    58 
       
    59     The example is implemented in two classes: \c SourceWidget and \c
       
    60     MimeData. The \c SourceWidget class sets up the GUI and starts the
       
    61     drag operation on request. The \c MimeData class, which inherits
       
    62     QMimeData, sends a signal when a drop target is found. This signal
       
    63     is connected to a slot in \c SourceWidget, which does the
       
    64     conversion from SVG to PNG. 
       
    65 
       
    66     \section1 SourceWidget Class Definition
       
    67 
       
    68     The \c SourceWidget class starts drag and drop operations and also
       
    69     does the image conversion.
       
    70     
       
    71     \snippet examples/draganddrop/delayedencoding/sourcewidget.h 0
       
    72     
       
    73     The \gui Export push button is connected to the \c startDrag()
       
    74     slot. The \c createData() slot will be invoked when data for the
       
    75     drag and drop operation is to be created.
       
    76 
       
    77     \section1 SourceWidget Class Implementation
       
    78 
       
    79     Let's start our code tour with a look at the \c startDrag() slot.
       
    80 
       
    81     \snippet examples/draganddrop/delayedencoding/sourcewidget.cpp 0
       
    82 
       
    83     We emit \c dataRequested() from \c MimeData when the operation has
       
    84     found a valid drop target.
       
    85 
       
    86     We gallop along to \c createData():
       
    87 
       
    88     \snippet examples/draganddrop/delayedencoding/sourcewidget.cpp 1
       
    89 
       
    90     Fortunately, Qt provides QSvgRenderer, which can render the SVG
       
    91     image to any QPaintDevice. Also, QImage has no problems saving to
       
    92     the PNG format.
       
    93 
       
    94     Finally, we can give the data to \c MimeData.
       
    95 
       
    96     \section1 MimeData Class Definition
       
    97 
       
    98     The \c MimeData class inherits QMimeData and makes it possible to
       
    99     delay preparing of the data for a drag and drop operation.
       
   100 
       
   101     \snippet examples/draganddrop/delayedencoding/mimedata.h 0
       
   102 
       
   103     We will look closer at \c retrieveData() and \c formats() in the
       
   104     next section.
       
   105 
       
   106     \section1 MimeData Class Implementation
       
   107 
       
   108     \snippet examples/draganddrop/delayedencoding/mimedata.cpp 0
       
   109 
       
   110     In the \c formats() function, we return the format of the
       
   111     data we provide. This is the \c { image/png } MIME type.
       
   112 
       
   113     \snippet examples/draganddrop/delayedencoding/mimedata.cpp 1
       
   114 
       
   115     \c retrieveData() is reimplemented from QMimeData and is
       
   116     called when the data is requested by the drag and drop
       
   117     operation. Fortunately for us, this happens when the operation
       
   118     is finishing, i.e., when a drop target has been found.
       
   119 
       
   120     We emit the \c dataRequested() signal, which is picked up by
       
   121     \c SourceWidget. The \c SourceWidget (as already explained)
       
   122     sets the data on \c MimeData with \l{QMimeData::}{setData()}.
       
   123 
       
   124 */
       
   125