feat: 添加ElaWidgetTool库
This commit is contained in:
124
ElaWidgetTools/ElaKeyBinder.cpp
Normal file
124
ElaWidgetTools/ElaKeyBinder.cpp
Normal file
@@ -0,0 +1,124 @@
|
||||
#include "ElaKeyBinder.h"
|
||||
#include "ElaContentDialog.h"
|
||||
#include "ElaKeyBinderContainer.h"
|
||||
#include "ElaKeyBinderPrivate.h"
|
||||
#include "ElaTheme.h"
|
||||
#include <QMouseEvent>
|
||||
#include <QPainter>
|
||||
#include <utility>
|
||||
Q_PROPERTY_CREATE_Q_CPP(ElaKeyBinder, int, BorderRadius)
|
||||
ElaKeyBinder::ElaKeyBinder(QWidget* parent)
|
||||
: QLabel(parent), d_ptr(new ElaKeyBinderPrivate())
|
||||
{
|
||||
Q_D(ElaKeyBinder);
|
||||
d->q_ptr = this;
|
||||
d->_pBorderRadius = 5;
|
||||
setFixedHeight(35);
|
||||
setMouseTracking(true);
|
||||
setStyleSheet("#ElaKeyBinder{background-color:transparent;}");
|
||||
QFont textFont = font();
|
||||
textFont.setLetterSpacing(QFont::AbsoluteSpacing, 0.5);
|
||||
textFont.setPixelSize(15);
|
||||
setFont(textFont);
|
||||
d->_binderContainer = new ElaKeyBinderContainer(this);
|
||||
setText(u8" 按键: " + QString(u8"未绑定") + " ");
|
||||
d->_binderDialog = new ElaContentDialog(window());
|
||||
d->_binderDialog->setCentralWidget(d->_binderContainer);
|
||||
d->_binderDialog->setLeftButtonText(u8"取消");
|
||||
d->_binderDialog->setMiddleButtonText(u8"重置");
|
||||
d->_binderDialog->setRightButtonText(u8"确认");
|
||||
connect(d->_binderDialog, &ElaContentDialog::middleButtonClicked, this, [=]() {
|
||||
d->_binderContainer->logOrResetHistoryData(false);
|
||||
});
|
||||
connect(d->_binderDialog, &ElaContentDialog::rightButtonClicked, this, [=]() {
|
||||
d->_binderContainer->saveBinderChanged();
|
||||
});
|
||||
d->onThemeChanged(eTheme->getThemeMode());
|
||||
connect(eTheme, &ElaTheme::themeModeChanged, d, &ElaKeyBinderPrivate::onThemeChanged);
|
||||
}
|
||||
|
||||
ElaKeyBinder::~ElaKeyBinder()
|
||||
{
|
||||
}
|
||||
|
||||
void ElaKeyBinder::setBinderKeyText(QString binderKeyText)
|
||||
{
|
||||
Q_D(ElaKeyBinder);
|
||||
d->_binderContainer->setBinderKeyText(binderKeyText);
|
||||
setText(u8" 按键: " + binderKeyText + " ");
|
||||
}
|
||||
|
||||
QString ElaKeyBinder::getBinderKeyText() const
|
||||
{
|
||||
Q_D(const ElaKeyBinder);
|
||||
return d->_binderContainer->getBinderKeyText();
|
||||
}
|
||||
|
||||
void ElaKeyBinder::setNativeVirtualBinderKey(quint32 binderKey)
|
||||
{
|
||||
Q_D(ElaKeyBinder);
|
||||
d->_binderContainer->setNativeVirtualBinderKey(binderKey);
|
||||
}
|
||||
|
||||
quint32 ElaKeyBinder::getNativeVirtualBinderKey() const
|
||||
{
|
||||
Q_D(const ElaKeyBinder);
|
||||
return d->_binderContainer->getNativeVirtualBinderKey();
|
||||
}
|
||||
|
||||
bool ElaKeyBinder::event(QEvent* event)
|
||||
{
|
||||
switch (event->type())
|
||||
{
|
||||
case QEvent::Enter:
|
||||
case QEvent::Leave:
|
||||
{
|
||||
update();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return QLabel::event(event);
|
||||
}
|
||||
|
||||
void ElaKeyBinder::mouseReleaseEvent(QMouseEvent* event)
|
||||
{
|
||||
Q_D(ElaKeyBinder);
|
||||
if (event->button() == Qt::LeftButton)
|
||||
{
|
||||
d->_binderDialog->show();
|
||||
d->_binderContainer->setFocus();
|
||||
d->_binderContainer->logOrResetHistoryData(true);
|
||||
}
|
||||
QLabel::mouseReleaseEvent(event);
|
||||
}
|
||||
|
||||
void ElaKeyBinder::paintEvent(QPaintEvent* event)
|
||||
{
|
||||
Q_D(ElaKeyBinder);
|
||||
if (palette().color(QPalette::WindowText) != ElaThemeColor(d->_themeMode, BasicText))
|
||||
{
|
||||
d->onThemeChanged(d->_themeMode);
|
||||
}
|
||||
QPainter painter(this);
|
||||
painter.save();
|
||||
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
|
||||
painter.setPen(ElaThemeColor(d->_themeMode, BasicBorder));
|
||||
painter.setBrush(underMouse() ? ElaThemeColor(d->_themeMode, BasicHover) : Qt::transparent);
|
||||
QRect borderRect = rect();
|
||||
borderRect.adjust(1, 1, -1, -1);
|
||||
painter.drawRoundedRect(borderRect, d->_pBorderRadius, d->_pBorderRadius);
|
||||
// 图标绘制
|
||||
QFont iconFont = QFont("ElaAwesome");
|
||||
iconFont.setPixelSize(16);
|
||||
painter.setFont(iconFont);
|
||||
painter.setPen(ElaThemeColor(d->_themeMode, BasicText));
|
||||
QRect iconRect = rect();
|
||||
iconRect.adjust(0, 0, -10, 0);
|
||||
painter.drawText(iconRect, Qt::AlignVCenter | Qt::AlignRight, QChar((unsigned short)ElaIconType::Pencil));
|
||||
painter.restore();
|
||||
QLabel::paintEvent(event);
|
||||
}
|
||||
Reference in New Issue
Block a user