Doc: Update topic on using Border Image to create buttons

Change-Id: Iaea732121a5dfbad9f5791efd47f947d0c0e6045
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Leena Miettinen
2020-08-31 13:23:28 +02:00
parent fdedd9570b
commit de38744bba
10 changed files with 145 additions and 156 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

@@ -60,9 +60,9 @@
\uicontrol Properties view. \uicontrol Properties view.
\li Drag and drop a \uicontrol Rectangle from the \uicontrol Library to \li Drag and drop a \uicontrol Rectangle from the \uicontrol Library to
the item in the navigator. This creates a nested item where the the item in \uicontrol Navigator. This creates a nested item where
item is the parent of the rectangle. Items are positioned relative the item is the parent of the rectangle. Items are positioned
to their parents. relative to their parents.
\li In the \uicontrol Properties view, modify the appearance of the \li In the \uicontrol Properties view, modify the appearance of the
rectangle: rectangle:
@@ -71,8 +71,8 @@
\li In the \uicontrol Color field, select the button color. \li In the \uicontrol Color field, select the button color.
\li In the \uicontrol Radius field, use the slider to set the radius of \li In the \uicontrol Radius field, set the radius of
the rectangle and produce rounded corners for the button. the rectangle to produce rounded corners for the button.
\li Select \uicontrol {Layout}, and then select the \li Select \uicontrol {Layout}, and then select the
\inlineimage anchor-fill.png \inlineimage anchor-fill.png
@@ -82,14 +82,15 @@
\endlist \endlist
\li Drag and drop a \uicontrol {Text} type to the item in the navigator. \li Drag and drop a \uicontrol {Text} type to the item in
\uicontrol Navigator.
\li In the \uicontrol Properties view, edit the properties of the \uicontrol Text \li In the \uicontrol Properties view, edit the properties of the \uicontrol Text
type. type.
\list a \list a
\li In the \uicontrol Text field, type \b Button. \li In the \uicontrol Text field, enter \e Button.
You can select the text color in the \uicontrol {Text color} field and the You can select the text color in the \uicontrol {Text color} field and the
font, size, and style in the font, size, and style in the
@@ -109,10 +110,17 @@
\endlist \endlist
To be useful, the button type has to be created in a project.
When you work on other QML files in the project to create screens
or other components for the UI, the button type appears in the
\uicontrol {My QML Components} tab of the \uicontrol Library view.
You can use it to create button instances and modify their properties
to assign them useful IDs, change their appearance, and set the button
text for each button instance, for example.
To create a graphical button that scales beautifully without using vector To create a graphical button that scales beautifully without using vector
graphics, use the \l [QML]{BorderImage}{Border Image} type. For more graphics, use the \l [QML]{BorderImage}{Border Image} type. For more
information, see \l{Creating Scalable Buttons and Borders}. information, see \l{Creating Scalable Buttons and Borders}.
*/ */
@@ -126,166 +134,147 @@
You can use the \l [QML]{BorderImage}{Border Image} type to display an You can use the \l [QML]{BorderImage}{Border Image} type to display an
image, such as a PNG file, as a border and a background. image, such as a PNG file, as a border and a background.
Use two border images and suitable graphics to make it look like the Use two border images and suitable graphics to change the appearance of
button is pushed down when it is clicked. One of the border images a button when it is clicked. You can use use \l{Adding States}{states}
is visible by default. You can specify that it is hidden and the other one to determine which image is visible depending on whether the mouse
becomes visible when the mouse is clicked. button is pressed down. You could add more images and states to
change the appearance of the button depending on other mouse events,
such as hovered.
Add a \l [QML]{MouseArea}{Mouse Area} type that covers the whole area and Add a \l [QML]{MouseArea}{Mouse Area} type that covers the whole area and
emits the clicked signal (\c {item.clicked()}) when it detects a mouse reacts to mouse events.
click.
You can add text to the button and set it up as a property. The text can You can use states also to change the button text color and font size. For
then be initialized from the outside, making the button a reusable UI example, you can scale the button text up or down.
component. The font size is also available in case the default size is too
big. You can scale down the button text and use smooth text rendering for
some extra quality.
\image qmldesigner-borderimage.png "Graphical button" \image qmldesigner-borderimage-type.png "Button type in Form Editor and States"
To create a graphical button: \section1 Creating the Button Type
\list 1 To create a button type, select \uicontrol File >
\uicontrol {New File or Project} >
\li Select \uicontrol File > \uicontrol {New File or Project} >
\if defined(qtcreator) \if defined(qtcreator)
\uicontrol Qt > \uicontrol {QML File (Qt Quick 2)} > \uicontrol Qt > \uicontrol {QML File (Qt Quick 2)} >
\else \else
\uicontrol {Qt Quick Files} > \uicontrol {Qt Quick File} > \uicontrol {Qt Quick Files} > \uicontrol {Qt Quick File} >
\endif \endif
\uicontrol Choose to create a QML file called Button.qml (for \uicontrol Choose to create a QML file called Button.qml (for example).
example).
\note Types are listed in the \uicontrol Library only if the \note Types are listed in the \uicontrol Library only if the
filename begins with a capital letter. filename begins with a capital letter.
\li Click \uicontrol {Design} to edit the file in the \section1 Constructing the Button Component
To construct the button component:
\list 1
\li Click \uicontrol {Design} to edit the QML file in the
\uicontrol {Form Editor}. \uicontrol {Form Editor}.
\li In the \uicontrol {Assets} tab of \uicontrol Library, select
\li In the \uicontrol Navigator, select \uicontrol Item and set the \uicontrol {Add New Assets} to copy the image files you want
to use to the project folder.
\li In the \uicontrol Navigator, select the root item and set the
width (\uicontrol W) and height (\uicontrol H) of the button in the width (\uicontrol W) and height (\uicontrol H) of the button in the
\uicontrol Properties view. \uicontrol Properties view to match the size of the images
you plan to use. This specifies the initial size of the button
\li Select \uicontrol Connections > \uicontrol {Properties} > component.
\uicontrol Add to add properties for the item: \li Drag and drop two \uicontrol {Border Image} types from
\uicontrol Library to the root item in \uicontrol Navigator.
\image qmldesigner-borderimage-properties.png "Properties" \li Drag and drop a \uicontrol Text type to the root item.
\li Drag and drop a \uicontrol {Mouse Area} to the root item in
\uicontrol Navigator.
\li Select a border image to edit the values of its properties:
\list a \list a
\li In the \uicontrol Id field, enter an ID for the border
\li Double-click in the columns in the view to specify a \c text image. In this example, we use the ID \e inactiveButton.
property with the type \c string and an empty value. \li In the \uicontrol Source field, select the image file for
the border image. For example, inactive_button.png.
\li Specify another property, \c fontSize, with the type \c int \li In the \uicontrol {Layout} tab, select the
and the value \c 10.
\endlist
\li Drag and drop two \uicontrol {Border Image} types from the
\uicontrol Library to the item in the \uicontrol Navigator.
\li Drag and drop a \uicontrol Text type to the item in the navigator.
\li Drag and drop a \uicontrol {Mouse Area} to the item in the
navigator.
\li In the navigator, select a border image to specify settings for it
in the \uicontrol Properties view:
\list a
\li Select \uicontrol Connections > \uicontrol {Bindings}
> \uicontrol Add to hide the image when the mouse button is not
pressed down. Specify the \c visible property with the
\c !mouseArea source item and \c pressed source property.
\image qmldesigner-borderimage-bindings.png "Border image bindings"
\li In the \uicontrol Source field, select the image file for the button,
for example button_up.png.
\li Click \uicontrol {Layout}, and then click the
\inlineimage anchor-fill.png \inlineimage anchor-fill.png
(\uicontrol {Fill to Parent}) button to anchor the border image to the (\uicontrol {Fill to Parent}) button to always make the
\uicontrol Item. image the same size as its parent. This makes the button
component scalable, because the image size is bound to the
component size.
\endlist \endlist
\li Select the other border image to edit the values of its properties
\li Select the other border image to specify similar settings for it: similarly:
\list a \list a
\li In the \uicontrol Id field, enter \e activeButton.
\li In \uicontrol Bindings, specify the \c visible property \li In the \uicontrol Source field, select the image file
with the \c mouseArea source item and \c pressed source for the button when it is clicked. For example,
property to show the image when the mouse button is pressed active_button.png.
down. \li In the \uicontrol {Layout} tab, select the
\inlineimage anchor-fill.png
\li In the \uicontrol Source field, select the image file for the button (\uicontrol {Fill to Parent}) button.
when it is clicked, for example button_down.png.
\li Select \uicontrol {Layout} > \uicontrol {Fill to Parent}
button to anchor the border image to the \uicontrol Item.
\endlist \endlist
\li Select the text item to specify font size and color in
\li Select the text to specify font size and color, and text scaling \uicontrol Properties:
and rendering:
\list a \list a
\li In the \uicontrol Color field, use
\li In the \uicontrol Color field, use the color picker to select the color picker to select the font color, or enter a value
the font color, or enter a value in the field. in the field.
\li In \uicontrol Font group, \uicontrol Size field, enter the
\li In \uicontrol Bindings, create bindings to properties: font size.
\li In the \uicontrol {Layout} tab, select
\image qmldesigner-borderimage-bindings-text.png "Text bindings"
\list
\li Set the source property of the \c text property as
\c text and the source item as \c parent.
\li Set the source property of the \c font.pixelSize as
\c fontSize and the source item as \c parent.
\li Set the source property of \c scale as
\c {if (!mouseArea} and the source item as
\c {pressed) { 1 } else { 0.95 }}.
\endlist
\li Click \uicontrol {Layout}, and then click the
\inlineimage anchor-vertical-center.png \inlineimage anchor-vertical-center.png
(\uicontrol {Vertical Center}) and (\uicontrol {Vertical Center}) and
\inlineimage anchor-horizontal-center.png \inlineimage anchor-horizontal-center.png
(\uicontrol {Horizontal Center}) buttons to inherit the (\uicontrol {Horizontal Center}) buttons to inherit the
vertical and horizontal centering from the parent. vertical and horizontal centering from the parent.
This ensures that the button label is centered when the
component is resized.
\endlist
\endlist \endlist
\li Select \uicontrol mouseArea in the navigator and then select \section1 Using States to Change Component Property Values
\uicontrol Connections > \uicontrol Add to set \c item.clicked()
as the value of the \c onClicked signal handler.
\image qmldesigner-borderimage-connections.png "Item connections"
\li In the \uicontrol {Text Editor}, specify the \c clicked signal for
the Item:
\qml
Item {
id: item
property string text: ""
property int fontSize: 10
signal clicked
}
\endqml
\list 1
\li In the \uicontrol States view, select \inlineimage plus.png
twice to create two new states.
\image qmldesigner-borderimage-states.png "Active and inactive states"
\li Select \uicontrol State1.
\li Change the state name to \e active.
\li Select \inlineimage icons/action-icon.png
, and then select \uicontrol {Set when Condition} to determine
when the state should be applied.
\li In the \uicontrol {Binding Editor}, select the \c mouseArea
type and the \c pressed signal to specify that the state is
applied when the mouse button is pressed down.
\image qmldesigner-borderimage-bindings.png "Active state when condition"
\li Select the text item in \uicontrol Navigator to specify that the
text size is scaled up when the button is pressed down.
\li In \uicontrol Properties, select the \uicontrol Advanced tab, and
increase the value of the \uicontrol Scale property.
\li Select \e inactiveButton in \uicontrol Navigator to hide
it in the \e active state by changing the value of its
\uicontrol Visibility property in \uicontrol Properties.
\li Select \uicontrol State2.
\li Change the state name to \e inactive.
\li Set the when condition for the state to \c !mouseArea.pressed to
specify that the state is applied when the mouse button is not
pressed down.
\image qmldesigner-borderimage-bindings1.png "Inactive state when condition"
it in the \e inactive state by changing the value of its
\uicontrol Visibility property in \uicontrol Properties.
\li Press \key {Ctrl+S} to save the button.
\li Select the \inlineimage live_preview.png
(\uicontrol {Show Live Preview}) button to check how the
button behaves when you click it. You can drag the preview
window borders to see what happens when you resize the
component.
\endlist \endlist
\note To test the button, add it to a Qt Quick Application or Qt To be useful, the button type has to be created in a project.
Quick UI project and run the application. When you work on other QML files in the project to create screens
or other components for the UI, the button type appears in the
\uicontrol {My QML Components} tab of the \uicontrol Library view.
You can drag and drop it to \uicontrol {Form Editor} or
\uicontrol Navigator to create button instances and modify the values
of their properties to assign them useful IDs, change their appearance,
and set the button text for each button instance, for example.
For more information about positioning buttons on screens, see
\l{Positioning Items in UIs}.
\image qmldesigner-borderimage.png "Button preview as part of a screen"
*/ */