Используйте QPropertyAnimation для уменьшения непрозрачности QLabel [duplicate]

Добавить почтовый заголовок в функцию почты

$header = "From: noreply@example.com\r\n"; 
$header.= "MIME-Version: 1.0\r\n"; 
$header.= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
$header.= "X-Priority: 1\r\n"; 

$status = mail($to, $subject, $message, $header);

if($status)
{ 
    echo '<p>Your mail has been sent!</p>';
} else { 
    echo '<p>Something went wrong, Please try again!</p>'; 
}
19
задан Angie Quijano 23 March 2016 в 17:01
поделиться

3 ответа

Попробуйте выставить некоторую часть палитры как свойство метки, а затем ее анимировать:

Q_PROPERTY(QColor color READ color WRITE setColor)

void MyLabel::setColor(const QColor &value) {
    QPalette palette;
    palette.setBrush(QPalette::WindowText, value);
    setPalette(palette);
}

QColor MyLabel::color() {
    return palette(QPalette::Normal, QPalette::Window).
}

void MyLabel::startFadeOutAnimation() {
    QPropertyAnimation *animation = new QPropertyAnimation(label, "color", this);
    QColor c = label->color();
    animation->setKeyValueAt(0, c);
    c.setAlpha(0);
    animation->setKeyValueAt(1, c);
    animation->setEasingCurve(QEasingCurve::OutQuad);
    animation->setDuration(1000);
    animation->start(QAbstractAnimation::DeleteWhenStopped);
}

Вы можете попытаться избежать подкласса путем определения и регистрации нового интерполятора, который будет обрабатывать QPalette qRegisterAnimationInterpolator , но это немного сложно.

1
ответ дан Marek R 20 August 2018 в 22:23
поделиться

Вы можете поместить свои виджеты в QGraphicsScene. Он поддерживает изменение прозрачности и анимацию.

См. Документацию QGraphicsProxyWidget для примера.

1
ответ дан Pavel Strakhov 20 August 2018 в 22:23
поделиться

На самом деле есть супер простой способ сделать это без беспорядочных перехватов QPaintEvent и без жестких требований QGraphicsProxyWidget, которые не работают на продвинутых дочерних виджетах. Техника ниже будет работать даже с продвинутыми виджетами и их дочерними виджетами.

Fade In Your Widget

// w is your widget
QGraphicsOpacityEffect *eff = new QGraphicsOpacityEffect(this);
w->setGraphicsEffect(eff);
QPropertyAnimation *a = new QPropertyAnimation(eff,"opacity");
a->setDuration(350);
a->setStartValue(0);
a->setEndValue(1);
a->setEasingCurve(QEasingCurve::InBack);
a->start(QPropertyAnimation::DeleteWhenStopped);

Fade Out Your Widget

// w is your widget
QGraphicsOpacityEffect *eff = new QGraphicsOpacityEffect(this);
w->setGraphicsEffect(eff);
QPropertyAnimation *a = new QPropertyAnimation(eff,"opacity");
a->setDuration(350);
a->setStartValue(1);
a->setEndValue(0);
a->setEasingCurve(QEasingCurve::OutBack);
a->start(QPropertyAnimation::DeleteWhenStopped);
connect(a,SIGNAL(finished()),this,SLOT(hideThisWidget()));
// now implement a slot called hideThisWidget() to do
// things like hide any background dimmer, etc.
25
ответ дан Volomike 20 August 2018 в 22:23
поделиться
  • 1
    Мне очень нравится этот ответ! Хотя, есть ли простой способ вытеснения нескольких виджетов в / из? – philm 21 May 2018 в 18:17
  • 2
    Что this в этом коде? родительский виджетов? – Jonathan 19 August 2018 в 06:23
  • 3
    important Если вы используете этот код в python, вам нужно сохранить переменные a и eff (self.a=), чтобы они не собирали мусор – Jonathan 19 August 2018 в 06:33
Другие вопросы по тегам:

Похожие вопросы: