diff options
author | Martin Jones <martin.jones@nokia.com> | 2009-05-06 02:48:59 (GMT) |
---|---|---|
committer | Martin Jones <martin.jones@nokia.com> | 2009-05-06 02:48:59 (GMT) |
commit | bcfb24b17cf5c97c734c82ca2072eb8b13b80eec (patch) | |
tree | 48ad40ec7ad8bd6da05ffe545660c69928ca6b96 /doc | |
parent | ac7e5eb6c5fff0ea87f1af0681ab1881b8bf8eb2 (diff) | |
parent | 0fc572e5d7e19bdfc5fc26a282904ffdd52093e3 (diff) | |
download | Qt-bcfb24b17cf5c97c734c82ca2072eb8b13b80eec.zip Qt-bcfb24b17cf5c97c734c82ca2072eb8b13b80eec.tar.gz Qt-bcfb24b17cf5c97c734c82ca2072eb8b13b80eec.tar.bz2 |
Merge branch 'kinetic-declarativeui' of git@scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
Diffstat (limited to 'doc')
-rw-r--r-- | doc/src/activeqt.qdoc | 2 | ||||
-rw-r--r-- | doc/src/declarative/modules.qdoc | 131 | ||||
-rw-r--r-- | doc/src/declarative/pics/3d-axis.png | bin | 0 -> 13840 bytes | |||
-rw-r--r-- | doc/src/declarative/pics/3d-rotation-axis.png | bin | 0 -> 14304 bytes | |||
-rw-r--r-- | doc/src/declarative/pics/squish-transform.png | bin | 0 -> 9652 bytes | |||
-rw-r--r-- | doc/src/designer-manual.qdoc | 12 | ||||
-rw-r--r-- | doc/src/examples/flowlayout.qdoc | 115 | ||||
-rw-r--r-- | doc/src/exportedfunctions.qdoc | 3 | ||||
-rw-r--r-- | doc/src/images/flowlayout-example.png | bin | 5054 -> 29350 bytes | |||
-rw-r--r-- | doc/src/layout.qdoc | 2 | ||||
-rw-r--r-- | doc/src/porting4.qdoc | 1 | ||||
-rw-r--r-- | doc/src/qnamespace.qdoc | 23 |
12 files changed, 156 insertions, 133 deletions
diff --git a/doc/src/activeqt.qdoc b/doc/src/activeqt.qdoc index 3919823..473f815 100644 --- a/doc/src/activeqt.qdoc +++ b/doc/src/activeqt.qdoc @@ -82,7 +82,7 @@ Designer}. The ActiveQt modules are part of the \l{Qt Full Framework Edition} and - the \l{Open Source Versions}. + the \l{Open Source Versions of Qt}. \sa {QAxContainer Module}, {QAxServer Module} */ diff --git a/doc/src/declarative/modules.qdoc b/doc/src/declarative/modules.qdoc index a97b5d7..5933223 100644 --- a/doc/src/declarative/modules.qdoc +++ b/doc/src/declarative/modules.qdoc @@ -3,133 +3,20 @@ \target qmlmodules \title Modules of Components -A \bold module is a collection of \l Components, in an XML namespace. +A \bold module is a collection of \l Components. -Named component in QML may include a namespace qualification, -and standard XML namespace scoping is allowed. This allows -components to be provided by different modules (even if they otherwise -have the same name). - -To use a module: - -\code -<Item xmlns:Clock="http://nokia.com/qml/Clock"> - <Clock:AnalogClock> - ... - </Clock:AnalogClock> -</Item> -\endcode - -To create a modules: - -Create the components, with appropriate exported properties, signals, and slots (slots not currently supported), -in a single directory: - -\c Clock/Face.qml: ... - -\c Clock/Hand.qml: ... - -\c Clock/AnalogClock.qml: -\code -<Item xmlns:Clock="http://nokia.com/qml/Clock"> - <Clock:Face .../> - <Clock:Hand .../> - <Clock:Hand .../> - <Clock:Hand .../> - ... -</Item> -\endcode - -Associate the directory with the namespace: +To use a module, include the following statement at the begining +of your QML: \code - Qml::addNameSpacePath("http://nokia.com/qml/Clock", "/usr/lib/qml/Clock"); +import "path" \endcode -Whole blocks of directories can be set: - -\code - Qml::addNameSpacePath("http://nokia.com/qml", "/usr/lib/qml"); -\endcode - -Associations can also be declared in the QML itself as a processing directive: - -\code - <?qtfx namespacepath:http://nokia.com/qml=/usr/lib/qml ?> -\endcode - -*/ - -/* - -A kludgey way to do unexported components: - -Clock/AnalogClock.qml: -<Item> - <properties> - <Property name="time" ... /> - </properties> - - <Component name="Hand"> ... </Component> <!-- invisible compoent --> - - <ComponentInstance component="Hand" size="100"/> - <ComponentInstance component="Hand" size="200"/> - <ComponentInstance component="Hand" size="300"/> -</Item> - -Another kludgey way (if _ handled specially)): - -Clock/_Hand.qml: ... - -A non-XML extension to improve syntax (XMLNS blows): - -<qml> - <using ns="http://nokia.com/qml/Clock"/> - <Face .../> - ... -</qml> - -*/ - -/* - IMPLEMENTATION - - Fully Qualifying names. CHOICE - IF QmlXmlParser qualifies names: - QmlXmlParser processes <qml> and <using> tags to create a list of QmlModuleDependency. - It uses talks with the same creators as QmlCompiler::compileTypes to qualify the names. - Each of QmlMetaType, QmlCustomParser, and the QmlCompiledComponent::classFactory(ies) - must know fully-qualified names. - Pro: simpler - Con: may be harder to regenerate original XML if unqualified name is lost - Con: should QmlXmlParser "know" about the type creators? - ELSE - QmlXmlParser processes <qml> and <using> tags to create a list of QmlModuleDependency, - which get stored in the QCompiledComponent. - When QmlCompiler::compileTypes creates components, module dependencies are used - to find the correct component - turning a name into a fully-qualified name - at "ref.className = type" before passing it to the creators. QmlMetaType::typeFunc must allow - qualified names even for builtin types, for example, QFxText might be - declared with the name Qt:Text. The QML::customParser must also understand - the concept, for example ListModel might be declared with the name Qt:ListModel. - QmlXmlParser::Object::typeName should be removed (used by DOM?), as redundant. - QmlXmlParser::Object::type will not define a fully qualified typename, just a name, - so types that are actually the same may have different type id because they - were named differently ("Qt:Text" vs "Text"). Need to check if this is a problem, - or whether QmlCompiler::output->types should be compressed. - - XML Namespaces. CHOICE CHOSEN - The advantage is that the namespaces could be fixed (per version), allowing proper DTDs, etc. +This allows all components defined in the directory \c path to be used in +the component where this statement appears. - Attached properties. PROBLEM - Type references in JavaScript can be either unqualified, in which case QmlMetaProperty - would have to FQ the type, which seems impossible, or qualified, the syntax - of which would be odd, like Qt.GridLayout.row or property["Qt:GridLayout.row"]. +Currently, \c path may only be a directory relative to the directory containing +the component issuing the import. - Access restrictions. PROBLEM - All use of the bind context must prevent direct access between objects that - are in different modules (i.e. between types with different module prefixes). - Maybe this is accomplishable just from having the right context tree. - Components in the same module can refer to their containing components (they - need to be careful if they're allowed to be used outside). +The import statement cannot be used by remote content. */ diff --git a/doc/src/declarative/pics/3d-axis.png b/doc/src/declarative/pics/3d-axis.png Binary files differnew file mode 100644 index 0000000..1a587ff --- /dev/null +++ b/doc/src/declarative/pics/3d-axis.png diff --git a/doc/src/declarative/pics/3d-rotation-axis.png b/doc/src/declarative/pics/3d-rotation-axis.png Binary files differnew file mode 100644 index 0000000..1b17261 --- /dev/null +++ b/doc/src/declarative/pics/3d-rotation-axis.png diff --git a/doc/src/declarative/pics/squish-transform.png b/doc/src/declarative/pics/squish-transform.png Binary files differnew file mode 100644 index 0000000..0eb848e --- /dev/null +++ b/doc/src/declarative/pics/squish-transform.png diff --git a/doc/src/designer-manual.qdoc b/doc/src/designer-manual.qdoc index 97713b1..2706182 100644 --- a/doc/src/designer-manual.qdoc +++ b/doc/src/designer-manual.qdoc @@ -344,10 +344,14 @@ of a QLineEdit or the width and height of item view widgets. This is where the widget size constraints -- \l{QWidget::minimumSize()}{minimumSize} and \l{QWidget::maximumSize()}{maximumSize} constraints come into play. These - are properties you can set in the property editor. Alternatively, to use - the current size as a size constraint value, choose one of the - \gui{Size Constraint} options from the widget's context menu. The layout - will then ensure that those constraints are met. + are properties you can set in the property editor. For example, to override + the default \l{QWidget::}{sizeHint()}, simply set + \l{QWidget::minimumSize()}{minimumSize} and \l{QWidget::maximumSize()} + {maximumSize} to the same value. Alternatively, to use the current size as + a size constraint value, choose one of the \gui{Size Constraint} options + from the widget's context menu. The layout will then ensure that those + constraints are met. To control the size of your widgets via code, you can + reimplement \l{QWidget::}{sizeHint()} in your code. The screenshot below shows the breakdown of a basic user interface designed using a grid. The coordinates on the screenshot show the position of each diff --git a/doc/src/examples/flowlayout.qdoc b/doc/src/examples/flowlayout.qdoc index 557ba39..3e7ec22 100644 --- a/doc/src/examples/flowlayout.qdoc +++ b/doc/src/examples/flowlayout.qdoc @@ -43,8 +43,117 @@ \example layouts/flowlayout \title Flow Layout Example - The Flow Layout example demonstrates a custom layout that arranges child widgets from - left to right and top to bottom in a top-level widget. + The Flow Layout example demonstrates a custom layout that arranges child + widgets from left to right and top to bottom in a top-level widget. + + \image flowlayout-example.png Screenshot of the Flow Layout example + + The items are first laid out horizontally and then vertically when each line + in the layout runs out of space. + + The Flowlayout class mainly uses QLayout and QWidgetItem, while the + Window uses QWidget and QLabel. We will only document the definition + and implementation of \c FlowLayout below. + + \section1 FlowLayout Class Definition + + The \c FlowLayout class inherits QLayout. It is a custom layout class + that arranges its child widgets horizontally and vertically. + + \snippet examples/layouts/flowlayout/flowlayout.h 0 + + We reimplement functions inherited from QLayout. These functions add items to + the layout and handle their orientation and geometry. + + We also declare two private methods, \c doLayout() and \c smartSpacing(). + \c doLayout() lays out the layout items, while the \c + smartSpacing() function calculates the spacing between them. + + \section1 FlowLayout Class Implementation + + We start off by looking at the constructor: + + \snippet examples/layouts/flowlayout/flowlayout.cpp 1 + + In the constructor we call \c setContentsMargins() to set the left, top, + right and bottom margin. By default, QLayout uses values provided by + the current style (see QStyle::PixelMetric). + + \snippet examples/layouts/flowlayout/flowlayout.cpp 2 + + In this example we reimplement \c addItem(), which is a pure virtual + function. When using \c addItem() the ownership of the layout items is + transferred to the layout, and it is therefore the layout's + responsibility to delete them. + + \snippet examples/layouts/flowlayout/flowlayout.cpp 3 + + \c addItem() is implemented to add items to the layout. + + \snippet examples/layouts/flowlayout/flowlayout.cpp 4 + + We implement \c horizontalSpacing() and \c verticalSpacing() to get + hold of the spacing between the widgets inside the layout. If the value + is less than or equal to 0, this value will be used. If not, + \c smartSpacing() will be called to calculate the spacing. + + \snippet examples/layouts/flowlayout/flowlayout.cpp 5 + + We then implement \c count() to return the number of items in the + layout. To navigate the list of items we use \c itemAt() and + takeAt() to remove and return items from the list. If an item is + removed, the remaining items will be renumbered. All three + functions are pure virtual functions from QLayout. + + \snippet examples/layouts/flowlayout/flowlayout.cpp 6 + + \c expandingDirections() returns the \l{Qt::Orientation}s in which the + layout can make use of more space than its \c sizeHint(). + + \snippet examples/layouts/flowlayout/flowlayout.cpp 7 + + To adjust to widgets of which height is dependent on width, we implement \c + heightForWidth(). The function \c hasHeightForWidth() is used to test for this + dependency, and \c heightForWidth() passes the width on to \c doLayout() which + in turn uses the width as an argument for the layout rect, i.e., the bounds in + which the items are laid out. This rect does not include the layout margin(). + + \snippet examples/layouts/flowlayout/flowlayout.cpp 8 + + \c setGeometry() is normally used to do the actual layout, i.e., calculate + the geometry of the layout's items. In this example, it calls \c doLayout() + and passes the layout rect. + + \c sizeHint() returns the preferred size of the layout and \c minimumSize() + returns the minimum size of the layout. + + \snippet examples/layouts/flowlayout/flowlayout.cpp 9 + + \c doLayout() handles the layout if \c horizontalSpacing() or \c + verticalSpacing() don't return the default value. It uses + \c getContentsMargins() to calculate the area available to the + layout items. + + \snippet examples/layouts/flowlayout/flowlayout.cpp 10 + + It then sets the proper amount of spacing for each widget in the + layout, based on the current style. + + \snippet examples/layouts/flowlayout/flowlayout.cpp 11 + + The position of each item in the layout is then calculated by + adding the items width and the line height to the initial x and y + coordinates. This in turn lets us find out whether the next item + will fit on the current line or if it must be moved down to the next. + We also find the height of the current line based on the widgets height. + + \snippet examples/layouts/flowlayout/flowlayout.cpp 12 + + \c smartSpacing() is designed to get the default spacing for either + the top-level layouts or the sublayouts. The default spacing for + top-level layouts, when the parent is a QWidget, will be determined + by querying the style. The default spacing for sublayouts, when + the parent is a QLayout, will be determined by querying the spacing + of the parent layout. - \image flowlayout-example.png */ diff --git a/doc/src/exportedfunctions.qdoc b/doc/src/exportedfunctions.qdoc index f67950c..f051ddc 100644 --- a/doc/src/exportedfunctions.qdoc +++ b/doc/src/exportedfunctions.qdoc @@ -129,6 +129,9 @@ on Mac OS X or be part of the main window. This feature is on by default. + In Qt 4.6, this is equivalent to + \c { QApplication::instance()->setAttribute(Qt::AA_DontUseNativeMenuBar); }. + \section1 void qt_mac_set_press_and_hold_context(bool \e{enable}) Turns emulation of the right mouse button by clicking and holding diff --git a/doc/src/images/flowlayout-example.png b/doc/src/images/flowlayout-example.png Binary files differindex 27660d6..61abe1f 100644 --- a/doc/src/images/flowlayout-example.png +++ b/doc/src/images/flowlayout-example.png diff --git a/doc/src/layout.qdoc b/doc/src/layout.qdoc index 38163c8..55dfd8b 100644 --- a/doc/src/layout.qdoc +++ b/doc/src/layout.qdoc @@ -371,7 +371,7 @@ should store the value in a local variable if you need it again later within in the same function. \o You should not call QLayoutItem::setGeometry() twice on the same - item in the smae function. This call can be very expensive if the + item in the same function. This call can be very expensive if the item has several child widgets, because the layout manager must do a complete layout every time. Instead, calculate the geometry and then set it. (This does not only apply to layouts, you should do diff --git a/doc/src/porting4.qdoc b/doc/src/porting4.qdoc index c8a9e2b..b93e139 100644 --- a/doc/src/porting4.qdoc +++ b/doc/src/porting4.qdoc @@ -457,6 +457,7 @@ \row \o QToolButton::offIconSet \o Use the \l{QIcon::Off}{off component} of QAbstractButton::icon instead. \row \o QToolButton::onIconSet \o Use the \l{QIcon::On}{on component} of QAbstractButton::icon instead. \row \o QWidget::microFocusHint \o N/A + \row \o QMimeSource::serialNumber () \o N/A \endtable \omit diff --git a/doc/src/qnamespace.qdoc b/doc/src/qnamespace.qdoc index 097333b..ad59b8d 100644 --- a/doc/src/qnamespace.qdoc +++ b/doc/src/qnamespace.qdoc @@ -146,10 +146,16 @@ widgets stay non-native unless specifically set by the Qt::WA_NativeWindow attribute. - \value AA_MacPluginApplication Stops the a Qt mac application from doing + \value AA_MacPluginApplication Stops the Qt mac application from doing specific initializations that do not necessarily make sense when using Qt to author a plugin. This includes avoiding loading our nib for the main - menu and not taking possession of the native menu bar. + menu and not taking possession of the native menu bar. When setting this + attribute to true will also set the AA_DontUseNativeMenuBar attribute + to true. + + \value AA_DontUseNativeMenuBar All menubars created while this attribute is + set to true won't be used as a native menubar (e.g, the menubar at + the top of the main screen on Mac OS X or at the bottom in Windows CE). \omitvalue AA_AttributeCount */ @@ -2651,3 +2657,16 @@ \sa QGraphicsWidget::windowFrameSectionAt() */ + +/*! + \enum Qt::TileRule + \since 4.6 + + This enum describes how to repeat or stretch the parts of an image when drawing. + + \value Stretch Scale the image to fit to the available area. + \value Repeat Tile the image until there is no more space. May crop the last image. + \value Round Like Repeat, but scales the images down to ensure that the last image is not cropped. + + \sa QPixmapBorders, qDrawBorderPixmap() +*/ |