Make a QLabel blink

7.7k views Asked by At

I'm using Qt to make a gui application for my beagleboard.

I'm trying to make a QLabel blink with a custom image.

QTimer::connect(timer, SIGNAL(timeout()), this, SLOT(blink()));
timer->start(1000);

I'm thinking to use QTimer to call the blink() function every second, but I do not have a clue what the code should be in blink() function. I hope someone can help, since i have struggle with this problem in a while now.

3

There are 3 answers

3
Jablonski On

The easiest way is to hide and show it again.

Class::blink()
{
    if(label->isHidden())
        label->show();
    else
        label->hide();
}

This approach is good because you don't need to set your image again and again, just show/hide it(set empty pixmap or set image every second is not efficient approach).

If you use layout, then it can really break your layout, so you can use QStackedWidget with imageLabel and empty label and change it every second. I think that it will be still better than set empty pixmap or set image every second. Choose the best for you.

http://qt-project.org/doc/qt-4.8/qstackedwidget.html

0
Antwane On

Using a bool member isQLabelVisible in your class

Class::blink() {
    if(isQLabelVisible) {
        doHideQLabel();
        isQLabelVisible = false;
    } else {
        doShowQLabel();
        isQLabelVisible = true;
    }
}

void Class::doHideQLabel() {
    [...]
}

void Class::doShowQLabel() {
    [...]
}

You have a starting point for a good solution. Now, to implements do{Hide,Show}QLabel(), read answers from this question and decide which one is the best for your needs.

0
saeed On

Create blinking animation in a GIF file.

Create whatever animation you like with tools like GIF Animator.

Show it like below:

auto movie = new QMovie("myblinking.gif"); 
QLabel blinklabel = new QLabel();
blinklabel->setMovie(movie);
movie->start();