Текущая непрозрачность QPushButton - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь анимировать плавное появление и исчезновение кнопок QButton. Он отлично работает, когда у меня есть предустановленные параметры непрозрачности в качестве начальных и конечных значений (например, 0 и 1 или 0 и 1). Код выглядит так:

    QGraphicsOpacityEffect *eff = new QGraphicsOpacityEffect(this);
    qreal sValue=this->windowOpacity(); // **problem is here. It's always 1!**
    if(eValue>0) sValue=0; // **had to do this as temporary solution** 
    this->setGraphicsEffect(eff);
    QPropertyAnimation *a = new QPropertyAnimation(eff,"opacity");
    a->setDuration(duration);c
    a->setStartValue(sValue);
    a->setEndValue(eValue);

    if(sValue<eValue) a->setEasingCurve(QEasingCurve::InBack);
    else a->setEasingCurve(QEasingCurve::OutBack);
    a->start(QPropertyAnimation::DeleteWhenStopped);

Итак, метод this->windowOpacity всегда возвращает 1. Не смотря ни на что. Также, когда я создаю кнопки и пытаюсь установить tbut->setWindowOpacity(0);, кнопка видна, несмотря на это. Ясно, что это не работает, и я не знаю, почему и как легко решить эту проблему, не создавая дополнительных свойств для класса кнопок.

1 Ответ

0 голосов
/ 10 июля 2020

Трудно сказать, принадлежит ли ваш код пользовательской реализации QPushButton (поэтому this относится к объекту QPushButton) или код взят из какого-то другого QWidget.

Вы можете посмотреть здесь:

QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect(ui->pushButton);
ui->pushButton->setGraphicsEffect(effect);

QPropertyAnimation *animation = new QPropertyAnimation(effect, "opacity");
animation->setDuration(3000);
animation->setStartValue(0.0);
animation->setEndValue(1.0);
animation->setEasingCurve(QEasingCurve::Linear);

// To track opacity value
QTimer *timer = new QTimer();
timer->setInterval(250);
connect(timer, &QTimer::timeout,
        this, [animation]
{
   qDebug() << "Opacity: " << animation->currentValue().toDouble();
});

timer->start();
animation->start();

Этот фрагмент кода делает следующее:

введите описание изображения здесь

И выводит это:

Opacity:  0.0693333
Opacity:  0.149
Opacity:  0.234333
Opacity:  0.319667
Opacity:  0.399667
Opacity:  0.485
Opacity:  0.565
Opacity:  0.650333
Opacity:  0.735667
Opacity:  0.815667
Opacity:  0.901
Opacity:  0.981
Opacity:  1

Вместо того, чтобы брать это значение из Button, возьмите его из QPropertyAnimation объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...