implement Icon Menu and examples

This commit is contained in:
laserpants 2016-04-25 02:37:59 +03:00
parent 59203ba9cd
commit 7e7f78bc13
3 changed files with 55 additions and 4 deletions

View File

@ -1,10 +1,40 @@
#include <QEvent>
#include "iconmenu.h"
#include "menu.h"
IconMenu::IconMenu(QWidget *parent)
MenuOverlay::MenuOverlay(QWidget *parent)
: QWidget(parent)
{
setAttribute(Qt::WA_TransparentForMouseEvents);
setAttribute(Qt::WA_NoSystemBackground);
}
MenuOverlay::~MenuOverlay()
{
}
IconMenu::IconMenu(const QIcon &icon, QWidget *parent)
: IconButton(icon, parent),
_overlay(new MenuOverlay(parent)),
_geometryWidget(0),
_menu(new Menu)
{
_menu->setParent(_overlay);
_menu->addMenuItem("Maps");
_menu->addMenuItem("Books");
_menu->addMenuItem("Flights");
_menu->addMenuItem("Apps");
}
IconMenu::~IconMenu()
{
}
bool IconMenu::event(QEvent *event)
{
if (QEvent::ParentChange == event->type()) {
_menu->setParent(parentWidget());
}
return IconButton::event(event);
}

View File

@ -2,14 +2,34 @@
#define ICONMENU_H
#include <QWidget>
#include "iconbutton.h"
class IconMenu : public QWidget
class Menu;
class MenuOverlay : public QWidget
{
Q_OBJECT
public:
explicit IconMenu(QWidget *parent = 0);
explicit MenuOverlay(QWidget *parent = 0);
~MenuOverlay();
};
class IconMenu : public IconButton
{
Q_OBJECT
public:
explicit IconMenu(const QIcon &icon, QWidget *parent = 0);
~IconMenu();
protected:
bool event(QEvent *event) Q_DECL_OVERRIDE;
private:
MenuOverlay *const _overlay;
QWidget *_geometryWidget;
Menu *const _menu;
};
#endif // ICONMENU_H

View File

@ -1,5 +1,6 @@
#include <QLayout>
#include <QEvent>
#include <QIcon>
#include "iconmenuexamples.h"
#include "components/iconmenu.h"
#include "exampleview.h"
@ -11,7 +12,7 @@ IconMenuExamples::IconMenuExamples(QWidget *parent)
QLayout *layout = widget()->layout();
{
IconMenu *iconMenu = new IconMenu;
IconMenu *iconMenu = new IconMenu(QIcon("../qt-material-widgets/face.svg"));
ExampleView *view = new ExampleView;
view->setWidget(iconMenu);