diff --git a/components/qtmaterialautocomplete.cpp b/components/qtmaterialautocomplete.cpp index bb99706..e49b4c0 100644 --- a/components/qtmaterialautocomplete.cpp +++ b/components/qtmaterialautocomplete.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include "qtmaterialautocomplete_internal.h" #include "qtmaterialflatbutton.h" @@ -36,19 +37,24 @@ void QtMaterialAutoCompletePrivate::init() Q_Q(QtMaterialAutoComplete); menu = new QWidget; + frame = new QWidget; stateMachine = new QtMaterialAutoCompleteStateMachine(menu); menuLayout = new QVBoxLayout; maxWidth = 0; menu->setParent(q->parentWidget()); + frame->setParent(q->parentWidget()); + + menu->installEventFilter(q); + frame->installEventFilter(q); QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; effect->setBlurRadius(11); effect->setColor(QColor(0, 0, 0, 50)); effect->setOffset(0, 3); - // create a box with geometry identical to menu, and then apply effect to it - //menu->setGraphicsEffect(effect); + frame->setGraphicsEffect(effect); + frame->setVisible(false); menu->setLayout(menuLayout); menu->setVisible(false); @@ -165,6 +171,7 @@ bool QtMaterialAutoComplete::QtMaterialAutoComplete::event(QEvent *event) QWidget *widget = static_cast(parent()); if (widget) { d->menu->setParent(widget); + d->frame->setParent(widget); } break; } @@ -178,20 +185,59 @@ bool QtMaterialAutoComplete::eventFilter(QObject *watched, QEvent *event) { Q_D(QtMaterialAutoComplete); - switch (event->type()) + if (d->frame == watched) { - case QEvent::MouseButtonPress: { - emit d->stateMachine->shouldFade(); - QtMaterialFlatButton *widget; - if ((widget = static_cast(watched))) { - QString text(widget->text()); - setText(text); - emit itemSelected(text); + switch (event->type()) + { + case QEvent::Paint: { + QPainter painter(d->frame); + painter.setOpacity(0.3); + painter.fillRect(d->frame->rect(), Qt::white); + break; + } + default: + break; } - break; } - default: - break; + else if (d->menu == watched) + { + switch (event->type()) + { + case QEvent::Resize: + case QEvent::Move: { + d->frame->setGeometry(d->menu->geometry()); + break; + } + case QEvent::Show: { + d->frame->show(); + d->menu->raise(); + break; + } + case QEvent::Hide: { + d->frame->hide(); + break; + } + default: + break; + } + } + else + { + switch (event->type()) + { + case QEvent::MouseButtonPress: { + emit d->stateMachine->shouldFade(); + QtMaterialFlatButton *widget; + if ((widget = static_cast(watched))) { + QString text(widget->text()); + setText(text); + emit itemSelected(text); + } + break; + } + default: + break; + } } return QtMaterialTextField::eventFilter(watched, event); } diff --git a/components/qtmaterialautocomplete_internal.cpp b/components/qtmaterialautocomplete_internal.cpp index 51e3acc..c423822 100644 --- a/components/qtmaterialautocomplete_internal.cpp +++ b/components/qtmaterialautocomplete_internal.cpp @@ -60,9 +60,9 @@ QtMaterialAutoCompleteStateMachine::QtMaterialAutoCompleteStateMachine(QWidget * transition->setTargetState(m_closedState); m_closingState->addTransition(transition); - QObject::connect(m_closedState, &QtMaterialAutoCompleteStateMachine::entered, [=](){ qDebug() << "Closed"; }); - QObject::connect(m_openState, &QtMaterialAutoCompleteStateMachine::entered, [=](){ qDebug() << "Opened"; }); - QObject::connect(m_closingState, &QtMaterialAutoCompleteStateMachine::entered, [=](){ qDebug() << "Closing"; }); + //QObject::connect(m_closedState, &QtMaterialAutoCompleteStateMachine::entered, [=](){ qDebug() << "Closed"; }); + //QObject::connect(m_openState, &QtMaterialAutoCompleteStateMachine::entered, [=](){ qDebug() << "Opened"; }); + //QObject::connect(m_closingState, &QtMaterialAutoCompleteStateMachine::entered, [=](){ qDebug() << "Closing"; }); } /*! diff --git a/components/qtmaterialautocomplete_p.h b/components/qtmaterialautocomplete_p.h index 8386bea..4fd405b 100644 --- a/components/qtmaterialautocomplete_p.h +++ b/components/qtmaterialautocomplete_p.h @@ -20,6 +20,7 @@ public: void init(); QWidget *menu; + QWidget *frame; QtMaterialAutoCompleteStateMachine *stateMachine; QVBoxLayout *menuLayout; QStringList dataSource;