Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qwidgetaction.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qwidgetaction.h"
5#include "qwidget.h"
6#include "qdebug.h"
7
8#include <QtWidgets/private/qwidget_p.h>
9
10#include "qwidgetaction_p.h"
11
13
80
85{
86 Q_D(QWidgetAction);
87 for (QWidget *w : std::as_const(d->createdWidgets))
90 QList<QWidget *> widgetsToDelete = d->createdWidgets;
91 d->createdWidgets.clear();
92 qDeleteAll(widgetsToDelete);
93 delete d->defaultWidget;
94}
95
104{
105 Q_D(QWidgetAction);
106 if (widget == d->defaultWidget || d->defaultWidgetInUse)
107 return;
108 delete d->defaultWidget;
109 d->defaultWidget = widget;
110 if (!widget)
111 return;
112
113 setVisible(!QWidgetPrivate::get(widget)->isExplicitlyHidden());
114 d->defaultWidget->hide();
115 d->defaultWidget->setParent(nullptr);
116 d->defaultWidgetInUse = false;
117 if (!isEnabled())
118 d->defaultWidget->setEnabled(false);
119}
120
125{
126 Q_D(const QWidgetAction);
127 return d->defaultWidget;
128}
129
140{
141 Q_D(QWidgetAction);
142
144 if (!w) {
145 if (d->defaultWidgetInUse || !d->defaultWidget)
146 return nullptr;
147 d->defaultWidget->setParent(parent);
148 d->defaultWidgetInUse = true;
149 return d->defaultWidget;
150 }
151
154 d->createdWidgets.append(w);
155 return w;
156}
157
167{
168 Q_D(QWidgetAction);
169
170 if (widget == d->defaultWidget) {
171 d->defaultWidget->hide();
172 d->defaultWidget->setParent(nullptr);
173 d->defaultWidgetInUse = false;
174 return;
175 }
176
177 if (!d->createdWidgets.contains(widget))
178 return;
179
182 d->createdWidgets.removeAll(widget);
184}
185
190{
191 Q_D(QWidgetAction);
192 if (event->type() == QEvent::ActionChanged) {
193 if (d->defaultWidget)
194 d->defaultWidget->setEnabled(isEnabled());
195 for (int i = 0; i < d->createdWidgets.size(); ++i)
196 d->createdWidgets.at(i)->setEnabled(isEnabled());
197 }
198 return QAction::event(event);
199}
200
208
218{
220 return nullptr;
221}
222
237
242QList<QWidget *> QWidgetAction::createdWidgets() const
243{
244 Q_D(const QWidgetAction);
245 return d->createdWidgets;
246}
247
249
250#include "moc_qwidgetaction.cpp"
The QAction class provides an abstraction for user commands that can be added to different user inter...
Definition qaction.h:30
bool event(QEvent *) override
\reimp
Definition qaction.cpp:1027
void setVisible(bool)
Definition qaction.cpp:990
bool isEnabled() const
Definition qaction.cpp:971
\inmodule QtCore
Definition qcoreevent.h:45
@ ActionChanged
Definition qcoreevent.h:151
static QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiverPrivate, Func2 slot, Qt::ConnectionType type=Qt::AutoConnection)
Definition qobject_p.h:299
static bool disconnect(const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiverPrivate, Func2 slot)
Definition qobject_p.h:328
\inmodule QtCore
Definition qobject.h:103
QObject * parent() const
Returns a pointer to the parent object.
Definition qobject.h:346
virtual bool eventFilter(QObject *watched, QEvent *event)
Filters events if this object has been installed as an event filter for the watched object.
Definition qobject.cpp:1555
void destroyed(QObject *=nullptr)
This signal is emitted immediately before the object obj is destroyed, after any instances of QPointe...
void deleteLater()
\threadsafe
Definition qobject.cpp:2435
void widgetDestroyed(QObject *o)
The QWidgetAction class extends QAction by an interface for inserting custom widgets into action base...
QWidget * requestWidget(QWidget *parent)
Returns a widget that represents the action, with the given parent.
QWidget * defaultWidget() const
Returns the default widget.
QWidgetAction(QObject *parent)
Constructs an action with parent.
virtual bool event(QEvent *) override
\reimp
void releaseWidget(QWidget *widget)
Releases the specified widget.
virtual void deleteWidget(QWidget *widget)
This function is called whenever the action is removed from a container widget that displays the acti...
virtual ~QWidgetAction()
Destroys the object and frees allocated resources.
virtual bool eventFilter(QObject *, QEvent *) override
\reimp
QList< QWidget * > createdWidgets() const
Returns the list of widgets that have been using createWidget() and are currently in use by widgets t...
void setDefaultWidget(QWidget *w)
Sets widget to be the default widget.
virtual QWidget * createWidget(QWidget *parent)
This function is called whenever the action is added to a container widget that supports custom widge...
static QWidgetPrivate * get(QWidget *w)
Definition qwidget_p.h:212
The QWidget class is the base class of all user interface objects.
Definition qwidget.h:99
void hide()
Hides the widget.
Definition qwidget.cpp:8135
QOpenGLWidget * widget
[1]
qDeleteAll(list.begin(), list.end())
Combined button and popup list for selecting options.
GLfloat GLfloat GLfloat w
[0]
struct _cl_event * event
GLhandleARB obj
[2]
#define Q_UNUSED(x)