spark-store/gui/spkpopup.cpp
RigoLigoRLC 99083d2bcb 添加商店内弹出窗消息
使用SpkUiMessage::SendStoreNotification激活,必须在SpkStore构造函数加载完全局SpkPopup类之后才可
使用。
2021-07-20 15:15:37 +08:00

56 lines
2.0 KiB
C++

#include "spkmainwindow.h"
#include "spkpopup.h"
#include <libavutil/avutil.h>
namespace SpkUi
{
SpkPopup::SpkPopup(QWidget *parent, int aMillis) : QWidget(parent)
{
setAttribute(Qt::WA_TransparentForMouseEvents);
setAttribute(Qt::WA_TranslucentBackground);
setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint);
mText = new QLabel();
mText->setStyleSheet("border-radius: 11px;"
"background-color: rgba(0,0,0,150);"
"color: white;"
"padding: 5px;");
mText->setText(tr("(No Text)"));
mBox = new QHBoxLayout(this);
mBox->addWidget(mText);
mBox->setContentsMargins(0, 0, 0, 0);
// The reason why we contain it in a widget is that, if we want a QLabel have rounded corners,
// then it must be able to be displayed with a translucent background. However, setting
// Qt::WA_TranslucentBackground will cause the entire background of QLabel transparent.
// Therefore we need a container (SpkPopup) with a transparent background as the canvas layer
// of the actual displayed text.
mAnimFadeIn = new QPropertyAnimation(this, "windowOpacity");
mAnimFadeOut = new QPropertyAnimation(this, "windowOpacity");
mAnim = new QSequentialAnimationGroup(this);
mAnimFadeIn->setStartValue(0);
mAnimFadeIn->setEndValue(1);
mAnimFadeIn->setDuration(250);
mAnimFadeOut->setStartValue(1);
mAnimFadeOut->setEndValue(0);
mAnimFadeOut->setDuration(250);
mAnim->addAnimation(mAnimFadeIn);
mAnim->addPause(aMillis);
mAnim->addAnimation(mAnimFadeOut);
setVisible(false);
}
void SpkPopup::Show(QString aText)
{
if(mAnim->state() == QSequentialAnimationGroup::Running)
mAnim->stop();
QSize parentSize = parentWidget()->size();
mText->setText(aText);
adjustSize();
move(QPoint((parentSize.width() - width()) / 2, parentSize.height() - height() - 30) +
parentWidget()->pos());
setMaximumWidth(parentSize.width() - 200);
setWindowOpacity(1);
show();
mAnim->start();
}
}