void DialogController::closeDialog() { QWidget *dialog = m_dialog; m_dialog = nullptr; m_widget = nullptr; if(!dialog) return; QRect geom = dialog->geometry(); int w = geom.width() + m_dialogOffsetLeft; QPropertyAnimation *animation = new QPropertyAnimation(dialog, "geometry"); animation->setStartValue(visibleGeometry(dialog)); animation->setEndValue(hiddenGeometry(dialog)); animation->setDuration(300); animation->setEasingCurve(QEasingCurve::OutExpo); animation->start(); connect(animation, &QPropertyAnimation::finished, [=]{ animation->deleteLater(); dialog->close(); dialog->deleteLater(); }); emit dialogClosed(); }
void Notify::showGriant() { this->show(); titleLabel->setText(title); QPixmap tempPix = QPixmap(this->icon); tempPix = tempPix.scaled(QSize(30, 30), Qt::KeepAspectRatio); iconLabel->setPixmap(tempPix); backgroundLabel->setFixedSize(this->size()); closeBtn->move(backgroundLabel->width() - closeBtn->width(), 0); // 超过长度省略号 QFontMetrics elidfont(bodyLabel->font()); QString text = elidfont.elidedText(this->body, Qt::ElideRight, bodyLabel->width() - 5); bodyLabel->setText(text); QPropertyAnimation *animation = new QPropertyAnimation(this, "windowOpacity", this); animation->setStartValue(0); animation->setEndValue(1); animation->setDuration(200); animation->start(); connect(animation, &QPropertyAnimation::finished, this, [animation, this](){ animation->deleteLater(); QTimer::singleShot(displayTime, this, [this](){ this->hideGriant(); }); }); }
void Notify::hideGriant() { QPropertyAnimation *animation = new QPropertyAnimation(this, "windowOpacity", this); animation->setStartValue(this->windowOpacity()); animation->setEndValue(0); animation->setDuration(200); animation->start(); connect(animation, &QPropertyAnimation::finished, this, [animation, this](){ this->hide(); animation->deleteLater(); Q_EMIT disappeared(); }); }
void KItemListViewAnimation::slotFinished() { QPropertyAnimation* finishedAnim = qobject_cast<QPropertyAnimation*>(sender()); for (int type = 0; type < AnimationTypeCount; ++type) { QMutableHashIterator<QGraphicsWidget*, QPropertyAnimation*> it(m_animation[type]); while (it.hasNext()) { it.next(); QPropertyAnimation* propertyAnim = it.value(); if (propertyAnim == finishedAnim) { QGraphicsWidget* widget = it.key(); it.remove(); finishedAnim->deleteLater(); emit finished(widget, static_cast<AnimationType>(type)); return; } } } Q_ASSERT(false); }