From 75d4dd71941a996ff3af757931aa5a1982a5f874 Mon Sep 17 00:00:00 2001 From: laserpants Date: Mon, 25 Apr 2016 09:16:54 +0300 Subject: [PATCH] implement Icon Menu --- components/iconbutton.cpp | 2 +- components/iconmenu.cpp | 20 ++++++++++++-------- components/iconmenu.h | 4 ++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/components/iconbutton.cpp b/components/iconbutton.cpp index a7e37ab..554fb5c 100644 --- a/components/iconbutton.cpp +++ b/components/iconbutton.cpp @@ -55,7 +55,7 @@ void IconButton::mousePressEvent(QMouseEvent *event) if (!_overlay) return; - QPoint p(_overlay->width(), _overlay->height()); + const QPoint p(_overlay->width(), _overlay->height()); _overlay->addRipple(p/2, iconSize().width()); emit clicked(); diff --git a/components/iconmenu.cpp b/components/iconmenu.cpp index 0569dd3..6b0be97 100644 --- a/components/iconmenu.cpp +++ b/components/iconmenu.cpp @@ -1,12 +1,13 @@ #include +#include #include "iconmenu.h" #include "menu.h" MenuOverlay::MenuOverlay(QWidget *parent) : QWidget(parent) { - setAttribute(Qt::WA_TransparentForMouseEvents); - setAttribute(Qt::WA_NoSystemBackground); + //setAttribute(Qt::WA_TransparentForMouseEvents); + //setAttribute(Qt::WA_NoSystemBackground); } MenuOverlay::~MenuOverlay() @@ -15,16 +16,16 @@ MenuOverlay::~MenuOverlay() IconMenu::IconMenu(const QIcon &icon, QWidget *parent) : IconButton(icon, parent), - _overlay(new MenuOverlay(parent)), - _geometryWidget(0), - _menu(new Menu) + _menuOverlay(new MenuOverlay(parent)), + _menu(new Menu(_menuOverlay)), + _menuGeometryWidget(0) { - _menu->setParent(_overlay); - _menu->addMenuItem("Maps"); _menu->addMenuItem("Books"); _menu->addMenuItem("Flights"); _menu->addMenuItem("Apps"); + + setAttribute(Qt::WA_TransparentForMouseEvents); } IconMenu::~IconMenu() @@ -34,7 +35,10 @@ IconMenu::~IconMenu() bool IconMenu::event(QEvent *event) { if (QEvent::ParentChange == event->type()) { - _menu->setParent(parentWidget()); + _menuOverlay->setParent(parentWidget()); + + QSize hint = _menu->layout()->sizeHint(); + _menuOverlay->setGeometry(0, 0, hint.width(), hint.height()); } return IconButton::event(event); } diff --git a/components/iconmenu.h b/components/iconmenu.h index 1acf23e..1d3d80d 100644 --- a/components/iconmenu.h +++ b/components/iconmenu.h @@ -27,9 +27,9 @@ protected: bool event(QEvent *event) Q_DECL_OVERRIDE; private: - MenuOverlay *const _overlay; - QWidget *_geometryWidget; + MenuOverlay *const _menuOverlay; Menu *const _menu; + QWidget *_menuGeometryWidget; }; #endif // ICONMENU_H