Add getContentWidget

This commit is contained in:
liangtie.qian 2023-02-01 01:37:40 +08:00
parent 7beeadccf6
commit c729b34716
2 changed files with 111 additions and 98 deletions

View File

@ -2,6 +2,7 @@
#define QTMATERIALDIALOG_H #define QTMATERIALDIALOG_H
#include <QScopedPointer> #include <QScopedPointer>
#include <qwidget.h>
#include "qt-material-widgets/lib/qtmaterialoverlaywidget.h" #include "qt-material-widgets/lib/qtmaterialoverlaywidget.h"
@ -19,6 +20,7 @@ public:
QLayout *windowLayout() const; QLayout *windowLayout() const;
void setWindowLayout(QLayout *layout); void setWindowLayout(QLayout *layout);
QWidget* getContentWidget() const;
public slots: public slots:
void showDialog(); void showDialog();
@ -34,4 +36,5 @@ private:
Q_DECLARE_PRIVATE(QtMaterialDialog) Q_DECLARE_PRIVATE(QtMaterialDialog)
}; };
#endif // QTMATERIALDIALOG_H #endif // QTMATERIALDIALOG_H

View File

@ -1,28 +1,29 @@
#include "qtmaterialdialog.h"
#include "qtmaterialdialog_p.h"
#include <QtWidgets/QStackedLayout>
#include <QtWidgets/QGraphicsDropShadowEffect>
#include <QStateMachine>
#include <QState>
#include <QtWidgets/QApplication>
#include <QPropertyAnimation>
#include <QPainter> #include <QPainter>
#include "qtmaterialdialog_internal.h" #include <QPropertyAnimation>
#include <QState>
#include <QStateMachine>
#include "qtmaterialdialog.h"
#include <QtWidgets/QApplication>
#include <QtWidgets/QGraphicsDropShadowEffect>
#include <QtWidgets/QStackedLayout>
#include "lib/qtmaterialstatetransition.h" #include "lib/qtmaterialstatetransition.h"
#include "qtmaterialdialog_internal.h"
#include "qtmaterialdialog_p.h"
/*! /*!
* \class QtMaterialDialogPrivate * \class QtMaterialDialogPrivate
* \internal * \internal
*/ */
QtMaterialDialogPrivate::QtMaterialDialogPrivate(QtMaterialDialog *q) QtMaterialDialogPrivate::QtMaterialDialogPrivate(QtMaterialDialog* q)
: q_ptr(q) : q_ptr(q)
{ {
} }
QtMaterialDialogPrivate::~QtMaterialDialogPrivate() QtMaterialDialogPrivate::~QtMaterialDialogPrivate() {}
{
}
void QtMaterialDialogPrivate::init() void QtMaterialDialogPrivate::init()
{ {
@ -33,14 +34,14 @@ void QtMaterialDialogPrivate::init()
stateMachine = new QStateMachine(q); stateMachine = new QStateMachine(q);
proxy = new QtMaterialDialogProxy(dialogWindow, proxyStack, q); proxy = new QtMaterialDialogProxy(dialogWindow, proxyStack, q);
QVBoxLayout *layout = new QVBoxLayout; QVBoxLayout* layout = new QVBoxLayout;
q->setLayout(layout); q->setLayout(layout);
QWidget *widget = new QWidget; QWidget* widget = new QWidget;
widget->setLayout(proxyStack); widget->setLayout(proxyStack);
widget->setMinimumWidth(400); widget->setMinimumWidth(400);
QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect;
effect->setColor(QColor(0, 0, 0, 200)); effect->setColor(QColor(0, 0, 0, 200));
effect->setBlurRadius(64); effect->setBlurRadius(64);
effect->setOffset(0, 13); effect->setOffset(0, 13);
@ -55,14 +56,14 @@ void QtMaterialDialogPrivate::init()
q->setAttribute(Qt::WA_TransparentForMouseEvents); q->setAttribute(Qt::WA_TransparentForMouseEvents);
QState *hiddenState = new QState; QState* hiddenState = new QState;
QState *visibleState = new QState; QState* visibleState = new QState;
stateMachine->addState(hiddenState); stateMachine->addState(hiddenState);
stateMachine->addState(visibleState); stateMachine->addState(visibleState);
stateMachine->setInitialState(hiddenState); stateMachine->setInitialState(hiddenState);
QtMaterialStateTransition *transition; QtMaterialStateTransition* transition;
transition = new QtMaterialStateTransition(DialogShowTransition); transition = new QtMaterialStateTransition(DialogShowTransition);
transition->setTargetState(visibleState); transition->setTargetState(visibleState);
@ -79,7 +80,7 @@ void QtMaterialDialogPrivate::init()
hiddenState->assignProperty(effect, "color", QColor(0, 0, 0, 0)); hiddenState->assignProperty(effect, "color", QColor(0, 0, 0, 0));
hiddenState->assignProperty(dialogWindow, "offset", 200); hiddenState->assignProperty(dialogWindow, "offset", 200);
QPropertyAnimation *animation; QPropertyAnimation* animation;
animation = new QPropertyAnimation(proxy, "opacity", q); animation = new QPropertyAnimation(proxy, "opacity", q);
animation->setDuration(280); animation->setDuration(280);
@ -94,10 +95,12 @@ void QtMaterialDialogPrivate::init()
animation->setEasingCurve(QEasingCurve::OutCirc); animation->setEasingCurve(QEasingCurve::OutCirc);
stateMachine->addDefaultAnimation(animation); stateMachine->addDefaultAnimation(animation);
QObject::connect(visibleState, SIGNAL(propertiesAssigned()), QObject::connect(
proxy, SLOT(makeOpaque())); visibleState, SIGNAL(propertiesAssigned()), proxy, SLOT(makeOpaque()));
QObject::connect(hiddenState, SIGNAL(propertiesAssigned()), QObject::connect(hiddenState,
proxy, SLOT(makeTransparent())); SIGNAL(propertiesAssigned()),
proxy,
SLOT(makeTransparent()));
stateMachine->start(); stateMachine->start();
QCoreApplication::processEvents(); QCoreApplication::processEvents();
@ -107,25 +110,30 @@ void QtMaterialDialogPrivate::init()
* \class QtMaterialDialog * \class QtMaterialDialog
*/ */
QtMaterialDialog::QtMaterialDialog(QWidget *parent) QtMaterialDialog::QtMaterialDialog(QWidget* parent)
: QtMaterialOverlayWidget(parent), : QtMaterialOverlayWidget(parent)
d_ptr(new QtMaterialDialogPrivate(this)) , d_ptr(new QtMaterialDialogPrivate(this))
{ {
d_func()->init(); d_func()->init();
} }
QtMaterialDialog::~QtMaterialDialog() QtMaterialDialog::~QtMaterialDialog() {}
{
}
QLayout *QtMaterialDialog::windowLayout() const QLayout* QtMaterialDialog::windowLayout() const
{ {
Q_D(const QtMaterialDialog); Q_D(const QtMaterialDialog);
return d->dialogWindow->layout(); return d->dialogWindow->layout();
} }
void QtMaterialDialog::setWindowLayout(QLayout *layout) QWidget* QtMaterialDialog::getContentWidget() const
{
Q_D(const QtMaterialDialog);
return d->dialogWindow;
}
void QtMaterialDialog::setWindowLayout(QLayout* layout)
{ {
Q_D(QtMaterialDialog); Q_D(QtMaterialDialog);
@ -136,7 +144,8 @@ void QtMaterialDialog::showDialog()
{ {
Q_D(QtMaterialDialog); Q_D(QtMaterialDialog);
d->stateMachine->postEvent(new QtMaterialStateTransitionEvent(DialogShowTransition)); d->stateMachine->postEvent(
new QtMaterialStateTransitionEvent(DialogShowTransition));
raise(); raise();
} }
@ -144,12 +153,13 @@ void QtMaterialDialog::hideDialog()
{ {
Q_D(QtMaterialDialog); Q_D(QtMaterialDialog);
d->stateMachine->postEvent(new QtMaterialStateTransitionEvent(DialogHideTransition)); d->stateMachine->postEvent(
new QtMaterialStateTransitionEvent(DialogHideTransition));
setAttribute(Qt::WA_TransparentForMouseEvents); setAttribute(Qt::WA_TransparentForMouseEvents);
d->proxyStack->setCurrentIndex(1); d->proxyStack->setCurrentIndex(1);
} }
void QtMaterialDialog::paintEvent(QPaintEvent *event) void QtMaterialDialog::paintEvent(QPaintEvent* event)
{ {
Q_UNUSED(event) Q_UNUSED(event)
@ -162,6 +172,6 @@ void QtMaterialDialog::paintEvent(QPaintEvent *event)
brush.setColor(Qt::black); brush.setColor(Qt::black);
painter.setBrush(brush); painter.setBrush(brush);
painter.setPen(Qt::NoPen); painter.setPen(Qt::NoPen);
painter.setOpacity(d->proxy->opacity()/2.4); painter.setOpacity(d->proxy->opacity() / 2.4);
painter.drawRect(rect()); painter.drawRect(rect());
} }