11#include <QWidgetAction>
16class RibbonButtonGroupPrivate
20 RibbonButtonGroupPrivate();
24 QMap<QAction *, QWidget *> m_items;
27RibbonButtonGroupPrivate::RibbonButtonGroupPrivate()
31void RibbonButtonGroupPrivate::init()
33 Q_Q(RibbonButtonGroup);
34 QHBoxLayout *layout =
new QHBoxLayout(q);
35 layout->setContentsMargins(0, 0, 0, 0);
36 layout->setSpacing(0);
37 q->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
41RibbonButtonGroup::RibbonButtonGroup(QWidget *parent)
53 QWidget::addAction(a);
60 QAction *a =
new QAction(icon,
text,
this);
63 RibbonButton *btn = qobject_cast<RibbonButton *>(d->m_items.value(a));
65 btn->setPopupMode(popMode);
73 QAction *a = menu->menuAction();
76 RibbonButton *btn = qobject_cast<RibbonButton *>(d->m_items.value(a));
78 btn->setPopupMode(popMode);
85 QAction *a =
new QAction(
this);
87 a->setSeparator(
true);
94 QWidgetAction *a =
new QWidgetAction(
this);
96 a->setDefaultWidget(w);
97 w->setAttribute(Qt::WA_Hover);
104 return layout()->sizeHint();
109 return layout()->minimumSize();
115 QAction *action = e->action();
116 QWidgetAction *widgetAction = qobject_cast<QWidgetAction *>(action);
117 QWidget *widget =
nullptr;
120 case QEvent::ActionAdded: {
122 widget = widgetAction->requestWidget(
this);
124 widget->setAttribute(Qt::WA_LayoutUsesWidgetRect);
127 }
else if (action->isSeparator()) {
134 button->setAutoRaise(
true);
135 button->setFocusPolicy(Qt::NoFocus);
137 button->setToolButtonStyle(Qt::ToolButtonIconOnly);
138 button->setDefaultAction(action);
142 layout()->addWidget(widget);
143 d->m_items.insert(action, widget);
145 case QEvent::ActionChanged: {
146 layout()->invalidate();
148 case QEvent::ActionRemoved: {
149 action->disconnect(
this);
150 widget = d->m_items.value(action);
151 layout()->removeWidget(widget);
152 d->m_items.remove(action);
157 if (action->parent() ==
this) {
158 action->setParent(
nullptr);
161 layout()->invalidate();
void setTopBottomMargins(int top, int bottom)
#define QX_INIT_PRIVATE(Class)
#define QX_DECLARE_PUBLIC(Class)
#define Q_NULLPTR
Copyleft (C) 2025 maminjie canpool@163.com SPDX-License-Identifier: MulanPSL-2.0
#define QX_FINI_PRIVATE()
#define QX_RIBBON_END_NAMESPACE
#define QX_RIBBON_BEGIN_NAMESPACE