Russian Qt Forum
Ноябрь 16, 2024, 08:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Постепенное скрытие QLabel  (Прочитано 4941 раз)
deaks
Гость
« : Декабрь 28, 2010, 11:09 »

Здравствуйте,

посоветуйте, как можно реализовать постепенное иcчезновение QLabel. Грубо говоря чтобы по таймеру в течении пары секунд QLabel становился полностью прозрачным
Записан
alexman
Гость
« Ответ #1 : Декабрь 28, 2010, 11:21 »

1. Делай наследника от QLabel.
2. void QWidget::paintEvent ( QPaintEvent * event ) [virtual protected]
3. void QObject::timerEvent ( QTimerEvent * event ) [virtual protected]
Записан
merke
Гость
« Ответ #2 : Декабрь 28, 2010, 11:40 »

http://qt.ucoz.net/blog/mozhno_regulirovat_prozrachnost_ljubogo_okoshka_s_pomoshhju_metoda/2009-10-18-31

+

QTimer
Записан
deaks
Гость
« Ответ #3 : Декабрь 28, 2010, 11:51 »


хм, почему-то QLabel  с текстом не меняет прозрачность. Как быть?

alexman,
могли бы вы чуть подробнее расписать свой способ?
« Последнее редактирование: Декабрь 28, 2010, 12:05 от deaks » Записан
alexman
Гость
« Ответ #4 : Декабрь 28, 2010, 23:23 »

alexman,
могли бы вы чуть подробнее расписать свой способ?

1. Заводишь переменную double opacityFactor; //opacityFactor in [0;1], init value of opacityFactor = 1.
2. Запускаешь таймер и в void timerEvent ( QTimerEvent * event ) изменяешь значение opacity и вызываешь update().
3. В void paintEvent ( QPaintEvent * event ) рисуешь текст, с учетом измененного значения alpha (alpha умножаешь на opacityFactor).
« Последнее редактирование: Декабрь 28, 2010, 23:25 от alexman » Записан
yaroslav429
Гость
« Ответ #5 : Декабрь 29, 2010, 04:15 »

По моему, есть способы попроще, нежели создание наследника. Правда для предложенного мной варианта нужна Qt 4.7.
И так..

Создаем свойство alpha для окна, где лабел. Это свойство будет иметь отношение только к лабелу.
Код:
Q_PROPERTY(int alpha READ alpha WRITE setAlpha)
private:
    int palpha;
    int alpha() const;
    void setAlpha(const int a_alpha);

И в setAlpha с помощью setStyleSheet указываем color лабела
Код:
ui->label->setStyleSheet(QString("color:rgba(100, 100, 100 , %1)").arg(a));

И вешаем это всё на QPropertyAnimation
Код:
QPropertyAnimation *propAnimationFade;
propAnimationFade = new QPropertyAnimation(this, "alpha");
propAnimationFade->setDuration(1000);
propAnimationFade->setStartValue(255);
propAnimationFade->setEndValue(0);
propAnimationFade->start();

Для наглядности - пример во вложениях =)
Записан
deaks
Гость
« Ответ #6 : Декабрь 29, 2010, 10:35 »

alexman, yaroslav429,

спасибо, друзья!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.138 секунд. Запросов: 21.