Convert tooltips example to snippets
The important bits from the example are ~10 lines of code, no need for building a poor-man's version of a graphics or item view. Change-Id: I7874c66765c5b46230c92846ee3de1ee83f47e45 Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io> (cherry picked from commit ae39b1634556f82fe5d7505ed9b6ebb883d6f813) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
e91de81017
commit
134d3592b7
Binary file not shown.
Before Width: | Height: | Size: 12 KiB |
@ -1,375 +0,0 @@
|
|||||||
// Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\example widgets/tooltips
|
|
||||||
\title Tool Tips Example
|
|
||||||
\examplecategory {User Interface Components}
|
|
||||||
\ingroup examples-widgets
|
|
||||||
\brief The Tool Tips example shows how to provide static and dynamic tool
|
|
||||||
tips for an application's widgets.
|
|
||||||
|
|
||||||
The simplest and most common way to set a widget's tool tip is by
|
|
||||||
calling its QWidget::setToolTip() function (static tool
|
|
||||||
tips). Then the tool tip is shown whenever the cursor points at
|
|
||||||
the widget. We show how to do this with our application's tool
|
|
||||||
buttons. But it is also possible to show different tool tips
|
|
||||||
depending on the cursor's position (dynamic tooltips). This
|
|
||||||
approach uses mouse tracking and event handling to determine what
|
|
||||||
widgets are located under the cursor at any point in time, and
|
|
||||||
displays their tool tips. The tool tips for the shape items in our
|
|
||||||
application are implemented using the latter approach.
|
|
||||||
|
|
||||||
\image tooltips-example.png
|
|
||||||
|
|
||||||
With the \c Tooltips application the user can create new shape
|
|
||||||
items with the provided tool buttons, and move the items around
|
|
||||||
using the mouse. Tooltips are provided whenever the cursor is
|
|
||||||
pointing to a shape item or one of the buttons.
|
|
||||||
|
|
||||||
The Tooltips example consists of two classes:
|
|
||||||
|
|
||||||
\list
|
|
||||||
\li \c ShapeItem is a custom widget representing one single shape item.
|
|
||||||
\li \c SortingBox inherits from QWidget and is the application's main
|
|
||||||
widget.
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
First we will review the \c SortingBox class, then we will take a
|
|
||||||
look at the \c ShapeItem class.
|
|
||||||
|
|
||||||
\section1 SortingBox Class Definition
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.h 0
|
|
||||||
|
|
||||||
The \c SortingBox class inherits QWidget, and it is the Tooltips
|
|
||||||
application's main widget. We reimplement several of the event
|
|
||||||
handlers.
|
|
||||||
|
|
||||||
The \c event() function provides tooltips, the \c resize()
|
|
||||||
function makes sure the application appears consistently when the
|
|
||||||
user resizes the main widget, and the \c paintEvent() function
|
|
||||||
displays the shape items within the \c SortingBox widget. The
|
|
||||||
mouse event handlers are reimplemented to make the user able to
|
|
||||||
move the items around.
|
|
||||||
|
|
||||||
In addition we need three private slots to make the user able to
|
|
||||||
create new shape items.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.h 1
|
|
||||||
|
|
||||||
We also create several private functions: We use the \c
|
|
||||||
initialItemPosition(), \c initialItemColor() and \c
|
|
||||||
createToolButton() functions when we are constructing the widget,
|
|
||||||
and we use the \c updateButtonGeometry() function whenever the
|
|
||||||
user is resizing the application's main widget.
|
|
||||||
|
|
||||||
The \c itemAt() function determines if there is a shape item at a
|
|
||||||
particular position, and the \c moveItemTo() function moves an
|
|
||||||
item to a new position. We use the \c createShapeItem(), \c
|
|
||||||
randomItemPosition() and \c randomItemColor() functions to create
|
|
||||||
new shape items.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.h 2
|
|
||||||
|
|
||||||
We keep all the shape items in a QList, and we keep three
|
|
||||||
QPainterPath objects holding the shapes of a circle, a square and
|
|
||||||
a triangle. We also need to have a pointer to an item when it is
|
|
||||||
moving, and we need to know its previous position.
|
|
||||||
|
|
||||||
\section1 SortingBox Class Implementation
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 0
|
|
||||||
|
|
||||||
In the constructor, we first set the Qt::WA_StaticContents
|
|
||||||
attribute on the widget. This attribute indicates that the widget
|
|
||||||
contents are north-west aligned and static. On resize, such a
|
|
||||||
widget will receive paint events only for the newly visible part
|
|
||||||
of itself.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 1
|
|
||||||
|
|
||||||
To be able to show the appropriate tooltips while the user is
|
|
||||||
moving the cursor around, we need to enable mouse tracking for the
|
|
||||||
widget.
|
|
||||||
|
|
||||||
If mouse tracking is disabled (the default), the widget only
|
|
||||||
receives mouse move events when at least one mouse button is
|
|
||||||
pressed while the mouse is being moved. If mouse tracking is
|
|
||||||
enabled, the widget receives mouse move events even if no buttons
|
|
||||||
are pressed.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 2
|
|
||||||
|
|
||||||
A widget's background role defines the brush from the widget's
|
|
||||||
palette that is used to render the background, and QPalette::Base
|
|
||||||
is typically white.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 3
|
|
||||||
|
|
||||||
After creating the application's tool buttons using the private \c
|
|
||||||
createToolButton() function, we construct the shapes of a circle,
|
|
||||||
a square and a triangle using QPainterPath.
|
|
||||||
|
|
||||||
The QPainterPath class provides a container for painting
|
|
||||||
operations, enabling graphical shapes to be constructed and
|
|
||||||
reused. The main advantage of painter paths over normal drawing
|
|
||||||
operations is that complex shapes only need to be created once,
|
|
||||||
but they can be drawn many times using only calls to
|
|
||||||
QPainter::drawPath().
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 4
|
|
||||||
|
|
||||||
Then we set the window title, resize the widget to a suitable
|
|
||||||
size, and finally create three initial shape items using the
|
|
||||||
private \c createShapeItem(), \c initialItemPosition() and \c
|
|
||||||
initialItemColor() functions.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 27
|
|
||||||
|
|
||||||
In the destructor, we delete all shape items.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 5
|
|
||||||
|
|
||||||
QWidget::event() is the main event handler and receives all the
|
|
||||||
widget's events. Normally, we recommend reimplementing one of the
|
|
||||||
specialized event handlers instead of this function. But here we
|
|
||||||
want to catch the QEvent::ToolTip events, and since these are
|
|
||||||
rather rare, there exists no specific event handler. For that
|
|
||||||
reason we reimplement the main event handler, and the first thing
|
|
||||||
we need to do is to determine the event's type:
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 6
|
|
||||||
|
|
||||||
If the type is QEvent::ToolTip, we cast the event to a QHelpEvent,
|
|
||||||
otherwise we propagate the event using the QWidget::event()
|
|
||||||
function.
|
|
||||||
|
|
||||||
The QHelpEvent class provides an event that is used to request
|
|
||||||
helpful information about a particular point in a widget.
|
|
||||||
|
|
||||||
For example, the QHelpEvent::pos() function returns the event's
|
|
||||||
position relative to the widget to which the event is dispatched.
|
|
||||||
Here we use this information to determine if the position of the
|
|
||||||
event is contained within the area of any of the shape items. If
|
|
||||||
it is, we display the shape item's tooltip at the position of the
|
|
||||||
event. If not, we hide the tooltip and explicitly ignore the event.
|
|
||||||
This makes sure that the calling code does not start any tooltip
|
|
||||||
specific modes as a result of the event. Note that the
|
|
||||||
QToolTip::showText() function needs the event's position in global
|
|
||||||
coordinates provided by QHelpEvent::globalPos().
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 7
|
|
||||||
|
|
||||||
The \c resizeEvent() function is reimplemented to receive the
|
|
||||||
resize events dispatched to the widget. It makes sure that the
|
|
||||||
tool buttons keep their position relative to the main widget when
|
|
||||||
the widget is resized. We want the buttons to always be vertically
|
|
||||||
aligned in the application's bottom right corner, so each time the
|
|
||||||
main widget is resized we update the buttons geometry.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 8
|
|
||||||
|
|
||||||
The \c paintEvent() function is reimplemented to receive paint
|
|
||||||
events for the widget. We create a QPainter for the \c SortingBox
|
|
||||||
widget, and run through the list of created shape items, drawing
|
|
||||||
each item at its defined position.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 9
|
|
||||||
|
|
||||||
The painter will by default draw all the shape items at position
|
|
||||||
(0,0) in the \c SortingBox widget. The QPainter::translate()
|
|
||||||
function translates the coordinate system by the given offset,
|
|
||||||
making each shape item appear at its defined position. But
|
|
||||||
remember to translate the coordinate system back when the item is
|
|
||||||
drawn, otherwise the next shape item will appear at a position
|
|
||||||
relative to the item drawn last.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 10
|
|
||||||
|
|
||||||
The QPainter::setBrush() function sets the current brush used by
|
|
||||||
the painter. When the provided argument is a QColor, the function
|
|
||||||
calls the appropriate QBrush constructor which creates a brush with
|
|
||||||
the specified color and Qt::SolidPattern style. The
|
|
||||||
QPainter::drawPath() function draws the given path using the
|
|
||||||
current pen for outline and the current brush for filling.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 11
|
|
||||||
|
|
||||||
The \c mousePressEvent() function is reimplemented to receive the
|
|
||||||
mouse press events dispatched to the widget. It determines if an
|
|
||||||
event's position is contained within the area of any of the shape
|
|
||||||
items, using the private \c itemAt() function.
|
|
||||||
|
|
||||||
If an item covers the position, we store a pointer to that item
|
|
||||||
and the event's position. If several of the shape items cover the
|
|
||||||
position, we store the pointer to the uppermost item. Finally, we
|
|
||||||
move the shape item's pointer to the end of the list, and make
|
|
||||||
a call to the QWidget::update() function to make the item appear
|
|
||||||
on top.
|
|
||||||
|
|
||||||
The QWidget::update() function does not cause an immediate
|
|
||||||
repaint; instead it schedules a paint event for processing when Qt
|
|
||||||
returns to the main event loop.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 12
|
|
||||||
|
|
||||||
The \c mouseMoveEvent() function is reimplemented to receive mouse
|
|
||||||
move events for the widget. If the left mouse button is pressed
|
|
||||||
and there exists a shape item in motion, we use the private \c
|
|
||||||
moveItemTo() function to move the item with an offset
|
|
||||||
corresponding to the offset between the positions of the current
|
|
||||||
mouse event and the previous one.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 13
|
|
||||||
|
|
||||||
The \c mouseReleaseEvent() function is reimplemented to receive
|
|
||||||
the mouse release events dispatched to the widget. If the left
|
|
||||||
mouse button is pressed and there exists a shape item in motion,
|
|
||||||
we use the private \c moveItemTo() function to move the item like
|
|
||||||
we did in \c mouseMoveEvent(). But then we remove the pointer to
|
|
||||||
the item in motion, making the shape item's position final for
|
|
||||||
now. To move the item further, the user will need to press the
|
|
||||||
left mouse button again.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 14
|
|
||||||
\codeline
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 15
|
|
||||||
\codeline
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 16
|
|
||||||
|
|
||||||
The \c createNewCircle(), \c createNewSquare() and \c
|
|
||||||
createNewTriangle() slots simply create new shape items, using the
|
|
||||||
private \c createShapeItem(), \c randomItemPosition() and \c
|
|
||||||
randomItemColor() functions.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 17
|
|
||||||
|
|
||||||
In the \c itemAt() function, we run through the list of created
|
|
||||||
shape items to check if the given position is contained within the
|
|
||||||
area of any of the shape items.
|
|
||||||
|
|
||||||
For each shape item we use the QPainterPath::contains() function
|
|
||||||
to find out if the item's painter path contains the position. If
|
|
||||||
it does we return the index of the item, otherwise we return
|
|
||||||
-1. We run through the list backwards to get the index of the
|
|
||||||
uppermost shape item in case several items cover the position.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 18
|
|
||||||
|
|
||||||
The \c moveItemTo() function moves the shape item in motion, and
|
|
||||||
the parameter \c pos is the position of a mouse event. First we
|
|
||||||
calculate the offset between the parameter \c pos and the previous
|
|
||||||
mouse event position. Then we add the offset to the current
|
|
||||||
position of the item in motion.
|
|
||||||
|
|
||||||
It is tempting to simply set the position of the item to be the
|
|
||||||
parameter \c pos. But an item's position defines the top left
|
|
||||||
corner of the item's bounding rectangle, and the parameter \c pos
|
|
||||||
can be any point; The suggested shortcut would cause the item to
|
|
||||||
jump to a position where the cursor is pointing to the bounding
|
|
||||||
rectangle's top left corner, regardless of the item's previous
|
|
||||||
position.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 19
|
|
||||||
|
|
||||||
Finally, we update the previous mouse event position, and make a
|
|
||||||
call to the QWidget::update() function to make the item appear at
|
|
||||||
its new position.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 20
|
|
||||||
|
|
||||||
In the \c updateButtonGeometry() function we set the geometry for
|
|
||||||
the given button. The parameter coordinates define the bottom
|
|
||||||
right corner of the button. We use these coordinates and the
|
|
||||||
button's size hint to determine the position of the upper left
|
|
||||||
corner. This position, and the button's width and height, are the
|
|
||||||
arguments required by the QWidget::setGeometry() function.
|
|
||||||
|
|
||||||
In the end, we calculate and return the y-coordinate of the bottom
|
|
||||||
right corner of the next button. We use the QWidget::style()
|
|
||||||
function to retrieve the widget's GUI style, and then
|
|
||||||
QStyle::pixelMetric() to determine the widget's preferred default
|
|
||||||
spacing between its child widgets.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 21
|
|
||||||
|
|
||||||
The \c createShapeItem() function creates a single shape item. It
|
|
||||||
sets the path, tooltip, position and color, using the item's own
|
|
||||||
functions. In the end, the function appends the new item's pointer
|
|
||||||
to the list of shape items, and calls QWidget::update() to make
|
|
||||||
it appear with the other items within the \c SortingBox widget.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 22
|
|
||||||
|
|
||||||
The \c createToolButton() function is called from the \c
|
|
||||||
SortingBox constructor. We create a tool button with the given
|
|
||||||
tooltip and icon. The button's parent is the \c SortingBox widget,
|
|
||||||
and its size is 32 x 32 pixels. Before we return the button, we
|
|
||||||
connect it to the given slot.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 23
|
|
||||||
|
|
||||||
The \c initialItemPosition() function is also called from the
|
|
||||||
constructor. We want the three first items to initially be
|
|
||||||
centered in the middle of the \c SortingBox widget, and we use
|
|
||||||
this function to calculate their positions.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 24
|
|
||||||
|
|
||||||
Whenever the user creates a new shape item, we want the new item
|
|
||||||
to appear at a random position, and we use the \c
|
|
||||||
randomItemPosition() function to calculate such a position. We
|
|
||||||
make sure that the item appears within the visible area of the
|
|
||||||
\c SortingBox widget, using the widget's current width and height
|
|
||||||
when calculating the random coordinates.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 25
|
|
||||||
|
|
||||||
As with \c initialItemPosition(), the \c initialItemColor()
|
|
||||||
function is called from the constructor. The purposes of both
|
|
||||||
functions are purely cosmetic: We want to control the initial
|
|
||||||
position and color of the three first items.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/sortingbox.cpp 26
|
|
||||||
|
|
||||||
Finally the \c randomItemColor() function is implemented to give
|
|
||||||
the shape items the user creates, a random color.
|
|
||||||
|
|
||||||
\section1 ShapeItem Class Definition
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/shapeitem.h 0
|
|
||||||
|
|
||||||
The \c ShapeItem class is a custom widget representing one single
|
|
||||||
shape item. The widget has a path, a position, a color and a
|
|
||||||
tooltip. We need functions to set or modify these objects, as well
|
|
||||||
as functions that return them. We make the latter functions \c
|
|
||||||
const to prohibit any modifications of the objects,
|
|
||||||
i.e. prohibiting unauthorized manipulation of the shape items
|
|
||||||
appearance.
|
|
||||||
|
|
||||||
\section1 ShapeItem Class Implementation
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/shapeitem.cpp 0
|
|
||||||
\codeline
|
|
||||||
\snippet widgets/tooltips/shapeitem.cpp 1
|
|
||||||
\codeline
|
|
||||||
\snippet widgets/tooltips/shapeitem.cpp 2
|
|
||||||
\codeline
|
|
||||||
\snippet widgets/tooltips/shapeitem.cpp 3
|
|
||||||
|
|
||||||
This first group of functions simply return the objects that are
|
|
||||||
requested. The objects are returned as constants, i.e. they cannot
|
|
||||||
be modified.
|
|
||||||
|
|
||||||
\snippet widgets/tooltips/shapeitem.cpp 4
|
|
||||||
\codeline
|
|
||||||
\snippet widgets/tooltips/shapeitem.cpp 5
|
|
||||||
\codeline
|
|
||||||
\snippet widgets/tooltips/shapeitem.cpp 6
|
|
||||||
\codeline
|
|
||||||
\snippet widgets/tooltips/shapeitem.cpp 7
|
|
||||||
|
|
||||||
The last group of functions set or modify the shape item's path,
|
|
||||||
position, color and tooltip, respectively.
|
|
||||||
*/
|
|
@ -12,5 +12,4 @@ qt_internal_add_example(shortcuteditor)
|
|||||||
qt_internal_add_example(sliders)
|
qt_internal_add_example(sliders)
|
||||||
qt_internal_add_example(spinboxes)
|
qt_internal_add_example(spinboxes)
|
||||||
qt_internal_add_example(tablet)
|
qt_internal_add_example(tablet)
|
||||||
qt_internal_add_example(tooltips)
|
|
||||||
qt_internal_add_example(windowflags)
|
qt_internal_add_example(windowflags)
|
||||||
|
@ -1,52 +0,0 @@
|
|||||||
# Copyright (C) 2022 The Qt Company Ltd.
|
|
||||||
# SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.16)
|
|
||||||
project(tooltips LANGUAGES CXX)
|
|
||||||
|
|
||||||
if(NOT DEFINED INSTALL_EXAMPLESDIR)
|
|
||||||
set(INSTALL_EXAMPLESDIR "examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/widgets/tooltips")
|
|
||||||
|
|
||||||
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
|
|
||||||
|
|
||||||
qt_standard_project_setup()
|
|
||||||
|
|
||||||
qt_add_executable(tooltips
|
|
||||||
main.cpp
|
|
||||||
shapeitem.cpp shapeitem.h
|
|
||||||
sortingbox.cpp sortingbox.h
|
|
||||||
)
|
|
||||||
|
|
||||||
set_target_properties(tooltips PROPERTIES
|
|
||||||
WIN32_EXECUTABLE TRUE
|
|
||||||
MACOSX_BUNDLE TRUE
|
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries(tooltips PRIVATE
|
|
||||||
Qt6::Core
|
|
||||||
Qt6::Gui
|
|
||||||
Qt6::Widgets
|
|
||||||
)
|
|
||||||
|
|
||||||
# Resources:
|
|
||||||
set(tooltips_resource_files
|
|
||||||
"images/circle.png"
|
|
||||||
"images/square.png"
|
|
||||||
"images/triangle.png"
|
|
||||||
)
|
|
||||||
|
|
||||||
qt_add_resources(tooltips "tooltips"
|
|
||||||
PREFIX
|
|
||||||
"/"
|
|
||||||
FILES
|
|
||||||
${tooltips_resource_files}
|
|
||||||
)
|
|
||||||
|
|
||||||
install(TARGETS tooltips
|
|
||||||
RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
|
|
||||||
BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
|
|
||||||
LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
|
|
||||||
)
|
|
Binary file not shown.
Before Width: | Height: | Size: 165 B |
Binary file not shown.
Before Width: | Height: | Size: 94 B |
Binary file not shown.
Before Width: | Height: | Size: 170 B |
@ -1,14 +0,0 @@
|
|||||||
// Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
||||||
|
|
||||||
#include <QApplication>
|
|
||||||
|
|
||||||
#include "sortingbox.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QApplication app(argc, argv);
|
|
||||||
SortingBox sortingBox;
|
|
||||||
sortingBox.show();
|
|
||||||
return app.exec();
|
|
||||||
}
|
|
@ -1,60 +0,0 @@
|
|||||||
// Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
||||||
|
|
||||||
#include "shapeitem.h"
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
QPainterPath ShapeItem::path() const
|
|
||||||
{
|
|
||||||
return myPath;
|
|
||||||
}
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
//! [1]
|
|
||||||
QPoint ShapeItem::position() const
|
|
||||||
{
|
|
||||||
return myPosition;
|
|
||||||
}
|
|
||||||
//! [1]
|
|
||||||
|
|
||||||
//! [2]
|
|
||||||
QColor ShapeItem::color() const
|
|
||||||
{
|
|
||||||
return myColor;
|
|
||||||
}
|
|
||||||
//! [2]
|
|
||||||
|
|
||||||
//! [3]
|
|
||||||
QString ShapeItem::toolTip() const
|
|
||||||
{
|
|
||||||
return myToolTip;
|
|
||||||
}
|
|
||||||
//! [3]
|
|
||||||
|
|
||||||
//! [4]
|
|
||||||
void ShapeItem::setPath(const QPainterPath &path)
|
|
||||||
{
|
|
||||||
myPath = path;
|
|
||||||
}
|
|
||||||
//! [4]
|
|
||||||
|
|
||||||
//! [5]
|
|
||||||
void ShapeItem::setToolTip(const QString &toolTip)
|
|
||||||
{
|
|
||||||
myToolTip = toolTip;
|
|
||||||
}
|
|
||||||
//! [5]
|
|
||||||
|
|
||||||
//! [6]
|
|
||||||
void ShapeItem::setPosition(const QPoint &position)
|
|
||||||
{
|
|
||||||
myPosition = position;
|
|
||||||
}
|
|
||||||
//! [6]
|
|
||||||
|
|
||||||
//! [7]
|
|
||||||
void ShapeItem::setColor(const QColor &color)
|
|
||||||
{
|
|
||||||
myColor = color;
|
|
||||||
}
|
|
||||||
//! [7]
|
|
@ -1,33 +0,0 @@
|
|||||||
// Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
||||||
|
|
||||||
#ifndef SHAPEITEM_H
|
|
||||||
#define SHAPEITEM_H
|
|
||||||
|
|
||||||
#include <QColor>
|
|
||||||
#include <QPainterPath>
|
|
||||||
#include <QPoint>
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
class ShapeItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void setPath(const QPainterPath &path);
|
|
||||||
void setToolTip(const QString &toolTip);
|
|
||||||
void setPosition(const QPoint &position);
|
|
||||||
void setColor(const QColor &color);
|
|
||||||
|
|
||||||
QPainterPath path() const;
|
|
||||||
QPoint position() const;
|
|
||||||
QColor color() const;
|
|
||||||
QString toolTip() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
QPainterPath myPath;
|
|
||||||
QPoint myPosition;
|
|
||||||
QColor myColor;
|
|
||||||
QString myToolTip;
|
|
||||||
};
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,277 +0,0 @@
|
|||||||
// Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
||||||
|
|
||||||
#include "sortingbox.h"
|
|
||||||
|
|
||||||
#include <QMouseEvent>
|
|
||||||
#include <QIcon>
|
|
||||||
#include <QPainter>
|
|
||||||
#include <QRandomGenerator>
|
|
||||||
#include <QStyle>
|
|
||||||
#include <QToolButton>
|
|
||||||
#include <QToolTip>
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
SortingBox::SortingBox(QWidget *parent)
|
|
||||||
: QWidget(parent)
|
|
||||||
{
|
|
||||||
//! [0] //! [1]
|
|
||||||
setMouseTracking(true);
|
|
||||||
//! [1] //! [2]
|
|
||||||
setBackgroundRole(QPalette::Base);
|
|
||||||
//! [2]
|
|
||||||
|
|
||||||
itemInMotion = nullptr;
|
|
||||||
|
|
||||||
//! [3]
|
|
||||||
newCircleButton = createToolButton(tr("New Circle"),
|
|
||||||
QIcon(":/images/circle.png"),
|
|
||||||
&SortingBox::createNewCircle);
|
|
||||||
|
|
||||||
newSquareButton = createToolButton(tr("New Square"),
|
|
||||||
QIcon(":/images/square.png"),
|
|
||||||
&SortingBox::createNewSquare);
|
|
||||||
|
|
||||||
newTriangleButton = createToolButton(tr("New Triangle"),
|
|
||||||
QIcon(":/images/triangle.png"),
|
|
||||||
&SortingBox::createNewTriangle);
|
|
||||||
|
|
||||||
circlePath.addEllipse(QRect(0, 0, 100, 100));
|
|
||||||
squarePath.addRect(QRect(0, 0, 100, 100));
|
|
||||||
|
|
||||||
qreal x = trianglePath.currentPosition().x();
|
|
||||||
qreal y = trianglePath.currentPosition().y();
|
|
||||||
trianglePath.moveTo(x + 120 / 2, y);
|
|
||||||
trianglePath.lineTo(0, 100);
|
|
||||||
trianglePath.lineTo(120, 100);
|
|
||||||
trianglePath.lineTo(x + 120 / 2, y);
|
|
||||||
|
|
||||||
//! [3] //! [4]
|
|
||||||
setWindowTitle(tr("Tool Tips"));
|
|
||||||
resize(500, 300);
|
|
||||||
|
|
||||||
createShapeItem(circlePath, tr("Circle"), initialItemPosition(circlePath),
|
|
||||||
initialItemColor());
|
|
||||||
createShapeItem(squarePath, tr("Square"), initialItemPosition(squarePath),
|
|
||||||
initialItemColor());
|
|
||||||
createShapeItem(trianglePath, tr("Triangle"),
|
|
||||||
initialItemPosition(trianglePath), initialItemColor());
|
|
||||||
}
|
|
||||||
//! [4]
|
|
||||||
|
|
||||||
//! [27]
|
|
||||||
SortingBox::~SortingBox()
|
|
||||||
{
|
|
||||||
qDeleteAll(shapeItems);
|
|
||||||
}
|
|
||||||
//! [27]
|
|
||||||
|
|
||||||
//! [5]
|
|
||||||
bool SortingBox::event(QEvent *event)
|
|
||||||
{
|
|
||||||
//! [5] //! [6]
|
|
||||||
if (event->type() == QEvent::ToolTip) {
|
|
||||||
QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
|
|
||||||
int index = itemAt(helpEvent->pos());
|
|
||||||
if (index != -1) {
|
|
||||||
QToolTip::showText(helpEvent->globalPos(), shapeItems[index]->toolTip());
|
|
||||||
} else {
|
|
||||||
QToolTip::hideText();
|
|
||||||
event->ignore();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return QWidget::event(event);
|
|
||||||
}
|
|
||||||
//! [6]
|
|
||||||
|
|
||||||
//! [7]
|
|
||||||
void SortingBox::resizeEvent(QResizeEvent * /* event */)
|
|
||||||
{
|
|
||||||
int margin = style()->pixelMetric(QStyle::PM_LayoutTopMargin);
|
|
||||||
int x = width() - margin;
|
|
||||||
int y = height() - margin;
|
|
||||||
|
|
||||||
y = updateButtonGeometry(newCircleButton, x, y);
|
|
||||||
y = updateButtonGeometry(newSquareButton, x, y);
|
|
||||||
updateButtonGeometry(newTriangleButton, x, y);
|
|
||||||
}
|
|
||||||
//! [7]
|
|
||||||
|
|
||||||
//! [8]
|
|
||||||
void SortingBox::paintEvent(QPaintEvent * /* event */)
|
|
||||||
{
|
|
||||||
QPainter painter(this);
|
|
||||||
painter.setRenderHint(QPainter::Antialiasing);
|
|
||||||
for (const ShapeItem *shapeItem : std::as_const(shapeItems)) {
|
|
||||||
//! [8] //! [9]
|
|
||||||
painter.translate(shapeItem->position());
|
|
||||||
//! [9] //! [10]
|
|
||||||
painter.setBrush(shapeItem->color());
|
|
||||||
painter.drawPath(shapeItem->path());
|
|
||||||
painter.translate(-shapeItem->position());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//! [10]
|
|
||||||
|
|
||||||
//! [11]
|
|
||||||
void SortingBox::mousePressEvent(QMouseEvent *event)
|
|
||||||
{
|
|
||||||
if (event->button() == Qt::LeftButton) {
|
|
||||||
int index = itemAt(event->position().toPoint());
|
|
||||||
if (index != -1) {
|
|
||||||
itemInMotion = shapeItems[index];
|
|
||||||
previousPosition = event->position().toPoint();
|
|
||||||
shapeItems.move(index, shapeItems.size() - 1);
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//! [11]
|
|
||||||
|
|
||||||
//! [12]
|
|
||||||
void SortingBox::mouseMoveEvent(QMouseEvent *event)
|
|
||||||
{
|
|
||||||
if ((event->buttons() & Qt::LeftButton) && itemInMotion)
|
|
||||||
moveItemTo(event->position().toPoint());
|
|
||||||
}
|
|
||||||
//! [12]
|
|
||||||
|
|
||||||
//! [13]
|
|
||||||
void SortingBox::mouseReleaseEvent(QMouseEvent *event)
|
|
||||||
{
|
|
||||||
if (event->button() == Qt::LeftButton && itemInMotion) {
|
|
||||||
moveItemTo(event->position().toPoint());
|
|
||||||
itemInMotion = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//! [13]
|
|
||||||
|
|
||||||
//! [14]
|
|
||||||
void SortingBox::createNewCircle()
|
|
||||||
{
|
|
||||||
static int count = 1;
|
|
||||||
createShapeItem(circlePath, tr("Circle <%1>").arg(++count),
|
|
||||||
randomItemPosition(), randomItemColor());
|
|
||||||
}
|
|
||||||
//! [14]
|
|
||||||
|
|
||||||
//! [15]
|
|
||||||
void SortingBox::createNewSquare()
|
|
||||||
{
|
|
||||||
static int count = 1;
|
|
||||||
createShapeItem(squarePath, tr("Square <%1>").arg(++count),
|
|
||||||
randomItemPosition(), randomItemColor());
|
|
||||||
}
|
|
||||||
//! [15]
|
|
||||||
|
|
||||||
//! [16]
|
|
||||||
void SortingBox::createNewTriangle()
|
|
||||||
{
|
|
||||||
static int count = 1;
|
|
||||||
createShapeItem(trianglePath, tr("Triangle <%1>").arg(++count),
|
|
||||||
randomItemPosition(), randomItemColor());
|
|
||||||
}
|
|
||||||
//! [16]
|
|
||||||
|
|
||||||
//! [17]
|
|
||||||
qsizetype SortingBox::itemAt(const QPoint &pos)
|
|
||||||
{
|
|
||||||
for (qsizetype i = shapeItems.size() - 1; i >= 0; --i) {
|
|
||||||
const ShapeItem *item = shapeItems[i];
|
|
||||||
if (item->path().contains(pos - item->position()))
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
//! [17]
|
|
||||||
|
|
||||||
//! [18]
|
|
||||||
void SortingBox::moveItemTo(const QPoint &pos)
|
|
||||||
{
|
|
||||||
QPoint offset = pos - previousPosition;
|
|
||||||
itemInMotion->setPosition(itemInMotion->position() + offset);
|
|
||||||
//! [18] //! [19]
|
|
||||||
previousPosition = pos;
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
//! [19]
|
|
||||||
|
|
||||||
//! [20]
|
|
||||||
int SortingBox::updateButtonGeometry(QToolButton *button, int x, int y)
|
|
||||||
{
|
|
||||||
QSize size = button->sizeHint();
|
|
||||||
button->setGeometry(x - size.rwidth(), y - size.rheight(),
|
|
||||||
size.rwidth(), size.rheight());
|
|
||||||
|
|
||||||
return y - size.rheight()
|
|
||||||
- style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing);
|
|
||||||
}
|
|
||||||
//! [20]
|
|
||||||
|
|
||||||
//! [21]
|
|
||||||
void SortingBox::createShapeItem(const QPainterPath &path,
|
|
||||||
const QString &toolTip, const QPoint &pos,
|
|
||||||
const QColor &color)
|
|
||||||
{
|
|
||||||
ShapeItem *shapeItem = new ShapeItem;
|
|
||||||
shapeItem->setPath(path);
|
|
||||||
shapeItem->setToolTip(toolTip);
|
|
||||||
shapeItem->setPosition(pos);
|
|
||||||
shapeItem->setColor(color);
|
|
||||||
shapeItems.append(shapeItem);
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
//! [21]
|
|
||||||
|
|
||||||
//! [22]
|
|
||||||
template<typename PointerToMemberFunction>
|
|
||||||
QToolButton *SortingBox::createToolButton(const QString &toolTip,
|
|
||||||
const QIcon &icon, const PointerToMemberFunction &member)
|
|
||||||
{
|
|
||||||
QToolButton *button = new QToolButton(this);
|
|
||||||
button->setToolTip(toolTip);
|
|
||||||
button->setIcon(icon);
|
|
||||||
button->setIconSize(QSize(32, 32));
|
|
||||||
connect(button, &QToolButton::clicked, this, member);
|
|
||||||
|
|
||||||
return button;
|
|
||||||
}
|
|
||||||
//! [22]
|
|
||||||
|
|
||||||
//! [23]
|
|
||||||
QPoint SortingBox::initialItemPosition(const QPainterPath &path)
|
|
||||||
{
|
|
||||||
int x;
|
|
||||||
int y = (height() - qRound(path.controlPointRect().height()) / 2);
|
|
||||||
if (shapeItems.size() == 0)
|
|
||||||
x = ((3 * width()) / 2 - qRound(path.controlPointRect().width())) / 2;
|
|
||||||
else
|
|
||||||
x = (width() / shapeItems.size()
|
|
||||||
- qRound(path.controlPointRect().width())) / 2;
|
|
||||||
|
|
||||||
return QPoint(x, y);
|
|
||||||
}
|
|
||||||
//! [23]
|
|
||||||
|
|
||||||
//! [24]
|
|
||||||
QPoint SortingBox::randomItemPosition()
|
|
||||||
{
|
|
||||||
return QPoint(QRandomGenerator::global()->bounded(width() - 120), QRandomGenerator::global()->bounded(height() - 120));
|
|
||||||
}
|
|
||||||
//! [24]
|
|
||||||
|
|
||||||
//! [25]
|
|
||||||
QColor SortingBox::initialItemColor()
|
|
||||||
{
|
|
||||||
return QColor::fromHsv(((shapeItems.size() + 1) * 85) % 256, 255, 190);
|
|
||||||
}
|
|
||||||
//! [25]
|
|
||||||
|
|
||||||
//! [26]
|
|
||||||
QColor SortingBox::randomItemColor()
|
|
||||||
{
|
|
||||||
return QColor::fromHsv(QRandomGenerator::global()->bounded(256), 255, 190);
|
|
||||||
}
|
|
||||||
//! [26]
|
|
@ -1,71 +0,0 @@
|
|||||||
// Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
||||||
|
|
||||||
#ifndef SORTINGBOX_H
|
|
||||||
#define SORTINGBOX_H
|
|
||||||
|
|
||||||
#include "shapeitem.h"
|
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
class QAction;
|
|
||||||
class QPoint;
|
|
||||||
class QToolButton;
|
|
||||||
QT_END_NAMESPACE
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
class SortingBox : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
SortingBox(QWidget *parent = nullptr);
|
|
||||||
~SortingBox();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
bool event(QEvent *event) override;
|
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
|
||||||
void paintEvent(QPaintEvent *event) override;
|
|
||||||
void mousePressEvent(QMouseEvent *event) override;
|
|
||||||
void mouseMoveEvent(QMouseEvent *event) override;
|
|
||||||
void mouseReleaseEvent(QMouseEvent *event) override;
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void createNewCircle();
|
|
||||||
void createNewSquare();
|
|
||||||
void createNewTriangle();
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
//! [1]
|
|
||||||
private:
|
|
||||||
int updateButtonGeometry(QToolButton *button, int x, int y);
|
|
||||||
void createShapeItem(const QPainterPath &path, const QString &toolTip,
|
|
||||||
const QPoint &pos, const QColor &color);
|
|
||||||
qsizetype itemAt(const QPoint &pos);
|
|
||||||
void moveItemTo(const QPoint &pos);
|
|
||||||
QPoint initialItemPosition(const QPainterPath &path);
|
|
||||||
QPoint randomItemPosition();
|
|
||||||
QColor initialItemColor();
|
|
||||||
QColor randomItemColor();
|
|
||||||
template<typename PointerToMemberFunction>
|
|
||||||
QToolButton *createToolButton(const QString &toolTip, const QIcon &icon,
|
|
||||||
//! [1]
|
|
||||||
const PointerToMemberFunction &member);
|
|
||||||
|
|
||||||
//! [2]
|
|
||||||
QList<ShapeItem *> shapeItems;
|
|
||||||
QPainterPath circlePath;
|
|
||||||
QPainterPath squarePath;
|
|
||||||
QPainterPath trianglePath;
|
|
||||||
|
|
||||||
QPoint previousPosition;
|
|
||||||
ShapeItem *itemInMotion;
|
|
||||||
|
|
||||||
QToolButton *newCircleButton;
|
|
||||||
QToolButton *newSquareButton;
|
|
||||||
QToolButton *newTriangleButton;
|
|
||||||
};
|
|
||||||
//! [2]
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,12 +0,0 @@
|
|||||||
QT += widgets
|
|
||||||
|
|
||||||
HEADERS = shapeitem.h \
|
|
||||||
sortingbox.h
|
|
||||||
SOURCES = main.cpp \
|
|
||||||
shapeitem.cpp \
|
|
||||||
sortingbox.cpp
|
|
||||||
RESOURCES = tooltips.qrc
|
|
||||||
|
|
||||||
# install
|
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/tooltips
|
|
||||||
INSTALLS += target
|
|
@ -1,7 +0,0 @@
|
|||||||
<!DOCTYPE RCC><RCC version="1.0">
|
|
||||||
<qresource>
|
|
||||||
<file>images/circle.png</file>
|
|
||||||
<file>images/square.png</file>
|
|
||||||
<file>images/triangle.png</file>
|
|
||||||
</qresource>
|
|
||||||
</RCC>
|
|
@ -9,5 +9,4 @@ SUBDIRS = analogclock \
|
|||||||
sliders \
|
sliders \
|
||||||
spinboxes \
|
spinboxes \
|
||||||
tablet \
|
tablet \
|
||||||
tooltips \
|
|
||||||
windowflags
|
windowflags
|
||||||
|
74
src/widgets/doc/snippets/tooltips/main.cpp
Normal file
74
src/widgets/doc/snippets/tooltips/main.cpp
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
// Copyright (C) 2023 The Qt Company Ltd.
|
||||||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||||
|
|
||||||
|
#include <QtWidgets>
|
||||||
|
|
||||||
|
using SearchBar = QWidget;
|
||||||
|
using Element = QWidget;
|
||||||
|
|
||||||
|
class Window : public QMainWindow
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Window(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool event(QEvent *event) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Element *elementAt(QPoint pos) const {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolBar *fileToolBar;
|
||||||
|
QMenu *fileMenu;
|
||||||
|
|
||||||
|
SearchBar *searchBar;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Window::Window(QWidget *parent)
|
||||||
|
: QMainWindow(parent)
|
||||||
|
{
|
||||||
|
//! [action_tooltip]
|
||||||
|
QAction *openAction = new QAction(tr("&Open..."));
|
||||||
|
openAction->setToolTip(tr("Open an existing file"));
|
||||||
|
|
||||||
|
fileMenu = menuBar()->addMenu(tr("&File"));
|
||||||
|
fileToolBar = addToolBar(tr("&File"));
|
||||||
|
|
||||||
|
fileMenu->addAction(openAction);
|
||||||
|
fileToolBar->addAction(openAction);
|
||||||
|
//! [action_tooltip]
|
||||||
|
|
||||||
|
//! [static_tooltip]
|
||||||
|
searchBar = new SearchBar;
|
||||||
|
searchBar->setToolTip(tr("Search in the current document"));
|
||||||
|
//! [static_tooltip]
|
||||||
|
|
||||||
|
fileToolBar->addWidget(searchBar);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! [dynamic_tooltip]
|
||||||
|
bool Window::event(QEvent *event)
|
||||||
|
{
|
||||||
|
if (event->type() == QEvent::ToolTip) {
|
||||||
|
QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
|
||||||
|
if (Element *element = elementAt(helpEvent->pos())) {
|
||||||
|
QToolTip::showText(helpEvent->globalPos(), element->toolTip());
|
||||||
|
} else {
|
||||||
|
QToolTip::hideText();
|
||||||
|
event->ignore();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return QWidget::event(event);
|
||||||
|
}
|
||||||
|
//! [dynamic_tooltip]
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
Window w;
|
||||||
|
return 0;
|
||||||
|
}
|
@ -45,15 +45,24 @@ using namespace Qt::StringLiterals;
|
|||||||
Rich text displayed in a tool tip is implicitly word-wrapped unless
|
Rich text displayed in a tool tip is implicitly word-wrapped unless
|
||||||
specified differently with \c{<p style='white-space:pre'>}.
|
specified differently with \c{<p style='white-space:pre'>}.
|
||||||
|
|
||||||
The simplest and most common way to set a widget's tool tip is by
|
UI elements that are created via \l{QAction} use the tooltip property
|
||||||
calling its QWidget::setToolTip() function.
|
of the QAction, so for most interactive UI elements, setting that
|
||||||
|
property is the easiest way to provide tool tips.
|
||||||
|
|
||||||
|
\snippet tooltips/main.cpp action_tooltip
|
||||||
|
|
||||||
|
For any other widgets, the simplest and most common way to set
|
||||||
|
a widget's tool tip is by calling its QWidget::setToolTip() function.
|
||||||
|
|
||||||
|
\snippet tooltips/main.cpp static_tooltip
|
||||||
|
|
||||||
It is also possible to show different tool tips for different
|
It is also possible to show different tool tips for different
|
||||||
regions of a widget, by using a QHelpEvent of type
|
regions of a widget, by using a QHelpEvent of type
|
||||||
QEvent::ToolTip. Intercept the help event in your widget's \l
|
QEvent::ToolTip. Intercept the help event in your widget's \l
|
||||||
{QWidget::}{event()} function and call QToolTip::showText() with
|
{QWidget::}{event()} function and call QToolTip::showText() with
|
||||||
the text you want to display. The \l{widgets/tooltips}{Tooltips}
|
the text you want to display.
|
||||||
example illustrates this technique.
|
|
||||||
|
\snippet tooltips/main.cpp dynamic_tooltip
|
||||||
|
|
||||||
If you are calling QToolTip::hideText(), or QToolTip::showText()
|
If you are calling QToolTip::hideText(), or QToolTip::showText()
|
||||||
with an empty string, as a result of a \l{QEvent::}{ToolTip}-event you
|
with an empty string, as a result of a \l{QEvent::}{ToolTip}-event you
|
||||||
@ -75,7 +84,7 @@ using namespace Qt::StringLiterals;
|
|||||||
\note Tool tips use the inactive color group of QPalette, because tool
|
\note Tool tips use the inactive color group of QPalette, because tool
|
||||||
tips are not active windows.
|
tips are not active windows.
|
||||||
|
|
||||||
\sa QWidget::toolTip, QAction::toolTip, {Tool Tips Example}
|
\sa QWidget::toolTip, QAction::toolTip
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class QTipLabel : public QLabel
|
class QTipLabel : public QLabel
|
||||||
|
Loading…
x
Reference in New Issue
Block a user