85QWidgetAction::~QWidgetAction()
88 for (QWidget *w : std::as_const(d->createdWidgets))
89 QObjectPrivate::disconnect(w, &QWidget::destroyed,
90 d, &QWidgetActionPrivate::widgetDestroyed);
91 QList<QWidget *> widgetsToDelete = d->createdWidgets;
92 d->createdWidgets.clear();
93 qDeleteAll(widgetsToDelete);
94 delete d->defaultWidget;
104void QWidgetAction::setDefaultWidget(QWidget *widget)
107 if (widget == d->defaultWidget || d->defaultWidgetInUse)
109 delete d->defaultWidget;
110 d->defaultWidget = widget;
114 setVisible(!QWidgetPrivate::get(widget)->isExplicitlyHidden());
115 d->defaultWidget->hide();
116 d->defaultWidget->setParent(
nullptr);
117 d->defaultWidgetInUse =
false;
119 d->defaultWidget->setEnabled(
false);
140QWidget *QWidgetAction::requestWidget(QWidget *parent)
144 QWidget *w = createWidget(parent);
146 if (d->defaultWidgetInUse || !d->defaultWidget)
148 d->defaultWidget->setParent(parent);
149 d->defaultWidgetInUse =
true;
150 return d->defaultWidget;
153 QObjectPrivate::connect(w, &QWidget::destroyed,
154 d, &QWidgetActionPrivate::widgetDestroyed);
155 d->createdWidgets.append(w);
167void QWidgetAction::releaseWidget(QWidget *widget)
171 if (widget == d->defaultWidget) {
172 d->defaultWidget->hide();
173 d->defaultWidget->setParent(
nullptr);
174 d->defaultWidgetInUse =
false;
178 if (!d->createdWidgets.contains(widget))
181 QObjectPrivate::disconnect(widget, &QWidget::destroyed,
182 d, &QWidgetActionPrivate::widgetDestroyed);
183 d->createdWidgets.removeAll(widget);
184 deleteWidget(widget);
190bool QWidgetAction::event(QEvent *event)
193 if (event->type() == QEvent::ActionChanged) {
194 if (d->defaultWidget)
195 d->defaultWidget->setEnabled(isEnabled());
196 for (
int i = 0; i < d->createdWidgets.size(); ++i)
197 d->createdWidgets.at(i)->setEnabled(isEnabled());
199 return QAction::event(event);