feat: 添加ElaWidgetTool库
This commit is contained in:
150
ElaWidgetTools/ElaWidget.cpp
Normal file
150
ElaWidgetTools/ElaWidget.cpp
Normal file
@@ -0,0 +1,150 @@
|
||||
#include "ElaWidget.h"
|
||||
|
||||
#include "ElaApplication.h"
|
||||
#include "ElaTheme.h"
|
||||
#include "private/ElaWidgetPrivate.h"
|
||||
#include <QApplication>
|
||||
#include <QHBoxLayout>
|
||||
#include <QPainter>
|
||||
#include <QScreen>
|
||||
#include <QTimer>
|
||||
#include <QVBoxLayout>
|
||||
Q_TAKEOVER_NATIVEEVENT_CPP(ElaWidget, d_func()->_appBar);
|
||||
ElaWidget::ElaWidget(QWidget* parent)
|
||||
: QWidget{parent}, d_ptr(new ElaWidgetPrivate())
|
||||
{
|
||||
Q_D(ElaWidget);
|
||||
d->q_ptr = this;
|
||||
resize(500, 500); // 默认宽高
|
||||
setWindowTitle("ElaWidget");
|
||||
setObjectName("ElaWidget");
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(6, 5, 3) || QT_VERSION > QT_VERSION_CHECK(6, 6, 1))
|
||||
setStyleSheet("#ElaWidget{background-color:transparent;}");
|
||||
#endif
|
||||
// 自定义AppBar
|
||||
d->_appBar = new ElaAppBar(this);
|
||||
d->_appBar->setIsStayTop(true);
|
||||
d->_appBar->setWindowButtonFlags(ElaAppBarType::StayTopButtonHint | ElaAppBarType::MinimizeButtonHint | ElaAppBarType::MaximizeButtonHint | ElaAppBarType::CloseButtonHint);
|
||||
connect(d->_appBar, &ElaAppBar::routeBackButtonClicked, this, &ElaWidget::routeBackButtonClicked);
|
||||
connect(d->_appBar, &ElaAppBar::navigationButtonClicked, this, &ElaWidget::navigationButtonClicked);
|
||||
connect(d->_appBar, &ElaAppBar::themeChangeButtonClicked, this, &ElaWidget::themeChangeButtonClicked);
|
||||
connect(d->_appBar, &ElaAppBar::closeButtonClicked, this, &ElaWidget::closeButtonClicked);
|
||||
|
||||
// 主题
|
||||
d->_themeMode = eTheme->getThemeMode();
|
||||
connect(eTheme, &ElaTheme::themeModeChanged, this, [=](ElaThemeType::ThemeMode themeMode) {
|
||||
d->_themeMode = themeMode;
|
||||
update();
|
||||
});
|
||||
|
||||
d->_windowDisplayMode = eApp->getWindowDisplayMode();
|
||||
connect(eApp, &ElaApplication::pWindowDisplayModeChanged, this, [=]() {
|
||||
d->_windowDisplayMode = eApp->getWindowDisplayMode();
|
||||
update();
|
||||
});
|
||||
eApp->syncWindowDisplayMode(this);
|
||||
}
|
||||
|
||||
ElaWidget::~ElaWidget()
|
||||
{
|
||||
eApp->syncWindowDisplayMode(this, false);
|
||||
}
|
||||
|
||||
void ElaWidget::setIsStayTop(bool isStayTop)
|
||||
{
|
||||
Q_D(ElaWidget);
|
||||
d->_appBar->setIsStayTop(isStayTop);
|
||||
}
|
||||
|
||||
bool ElaWidget::getIsStayTop() const
|
||||
{
|
||||
return d_ptr->_appBar->getIsStayTop();
|
||||
}
|
||||
|
||||
void ElaWidget::setIsFixedSize(bool isFixedSize)
|
||||
{
|
||||
Q_D(ElaWidget);
|
||||
d->_appBar->setIsFixedSize(isFixedSize);
|
||||
}
|
||||
|
||||
bool ElaWidget::getIsFixedSize() const
|
||||
{
|
||||
return d_ptr->_appBar->getIsFixedSize();
|
||||
}
|
||||
|
||||
void ElaWidget::setIsDefaultClosed(bool isDefaultClosed)
|
||||
{
|
||||
Q_D(ElaWidget);
|
||||
d->_appBar->setIsDefaultClosed(isDefaultClosed);
|
||||
Q_EMIT pIsDefaultClosedChanged();
|
||||
}
|
||||
|
||||
bool ElaWidget::getIsDefaultClosed() const
|
||||
{
|
||||
Q_D(const ElaWidget);
|
||||
return d->_appBar->getIsDefaultClosed();
|
||||
}
|
||||
|
||||
void ElaWidget::setAppBarHeight(int appBarHeight)
|
||||
{
|
||||
Q_D(ElaWidget);
|
||||
d->_appBar->setAppBarHeight(appBarHeight);
|
||||
Q_EMIT pAppBarHeightChanged();
|
||||
}
|
||||
|
||||
int ElaWidget::getAppBarHeight() const
|
||||
{
|
||||
Q_D(const ElaWidget);
|
||||
return d->_appBar->getAppBarHeight();
|
||||
}
|
||||
|
||||
void ElaWidget::moveToCenter()
|
||||
{
|
||||
if (isMaximized() || isFullScreen())
|
||||
{
|
||||
return;
|
||||
}
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
|
||||
auto geometry = screen()->availableGeometry();
|
||||
#else
|
||||
auto geometry = qApp->screenAt(this->geometry().center())->geometry();
|
||||
#endif
|
||||
setGeometry((geometry.left() + geometry.right() - width()) / 2, (geometry.top() + geometry.bottom() - height()) / 2, width(), height());
|
||||
}
|
||||
|
||||
void ElaWidget::setWindowButtonFlag(ElaAppBarType::ButtonType buttonFlag, bool isEnable)
|
||||
{
|
||||
Q_D(ElaWidget);
|
||||
d->_appBar->setWindowButtonFlag(buttonFlag, isEnable);
|
||||
}
|
||||
|
||||
void ElaWidget::setWindowButtonFlags(ElaAppBarType::ButtonFlags buttonFlags)
|
||||
{
|
||||
Q_D(ElaWidget);
|
||||
d->_appBar->setWindowButtonFlags(buttonFlags);
|
||||
}
|
||||
|
||||
ElaAppBarType::ButtonFlags ElaWidget::getWindowButtonFlags() const
|
||||
{
|
||||
return d_ptr->_appBar->getWindowButtonFlags();
|
||||
}
|
||||
|
||||
void ElaWidget::paintEvent(QPaintEvent* event)
|
||||
{
|
||||
Q_D(ElaWidget);
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 3) && QT_VERSION <= QT_VERSION_CHECK(6, 6, 1))
|
||||
if (d->_windowDisplayMode != ElaApplicationType::WindowDisplayMode::ElaMica)
|
||||
#else
|
||||
if (d->_windowDisplayMode == ElaApplicationType::WindowDisplayMode::Normal)
|
||||
#endif
|
||||
{
|
||||
QPainter painter(this);
|
||||
painter.save();
|
||||
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
|
||||
painter.setPen(Qt::NoPen);
|
||||
painter.setBrush(ElaThemeColor(d->_themeMode, WindowBase));
|
||||
painter.drawRect(rect());
|
||||
painter.restore();
|
||||
}
|
||||
QWidget::paintEvent(event);
|
||||
}
|
||||
Reference in New Issue
Block a user