25 , m_menu(new QMenu(this))
27 setCursor(Qt::ArrowCursor);
28 setFocusPolicy(Qt::NoFocus);
31 connect(m_menu, &QMenu::aboutToShow,
this, std::bind(&ButtonWithMenu::setDown,
this,
true));
32 connect(m_menu, &QMenu::aboutToHide,
this, std::bind(&ButtonWithMenu::setDown,
this,
false));
35void ButtonWithMenu::setCurrentItem()
37 if (
auto* action = qobject_cast<QAction*>(sender())) {
38 setCurrentItem(action->data().value<Item>());
50 int index = m_items.indexOf(m_currentItem) + 1;
52 if (index < m_items.size()) {
59 int index = m_items.indexOf(m_currentItem) - 1;
70 if (m_items.count() == 1) {
79 for (
const Item &item : items) {
86 int index = m_items.indexOf(item);
91 m_items.remove(index);
93 if (m_items.isEmpty()) {
98 if (m_currentItem == item) {
105 int index = m_items.indexOf(item);
106 if (index < 0 || m_currentItem == item) {
110 m_currentItem = item;
113 setToolTip(m_currentItem.
text);
125void ButtonWithMenu::wheelEvent(QWheelEvent* event)
149 return m_currentItem;
157void ButtonWithMenu::generateMenu()
161 for (
const Item &item : std::as_const(m_items)) {
163 variant.setValue(item);
164 m_menu->addAction(item.icon, item.text,
this, SLOT(setCurrentItem()))->setData(variant);
168void ButtonWithMenu::mousePressEvent(QMouseEvent *event)
170 if (event->buttons() == Qt::LeftButton && parentWidget() && parentWidget()->parentWidget()) {
172 QWidget *w = parentWidget()->parentWidget();
173 m_menu->popup(w->mapToGlobal(w->rect().bottomLeft()));
Direction takeDirection()
void processEvent(QWheelEvent *event)