让QLabel闪烁

3

我正在使用Qt为我的beagleboard制作GUI应用程序。

我试图使QLabel闪烁,并使用自定义图像。

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

我计划使用QTimer每秒调用blink()函数,但是我不知道blink()函数里应该写什么代码。希望能有人帮忙,因为我已经困扰这个问题有一段时间了。


最简单的方法是使用电影:http://qt-project.org/doc/qt-5/qlabel.html#setMovie - Marek R
3个回答

3
GIF 文件中创建 闪烁 动画。
使用像 GIF Animator 这样的工具创建您喜欢的任何动画。
按以下方式显示:
auto movie = new QMovie("myblinking.gif"); 
QLabel blinklabel = new QLabel();
blinklabel->setMovie(movie);
movie->start();

1
最简单的方法是隐藏然后再次显示它。
Class::blink()
{
    if(label->isHidden())
        label->show();
    else
        label->hide();
}

这种方法很好,因为你不需要一遍又一遍地设置图像,只需显示/隐藏它(每秒设置空像素图或图像不是有效的方法)。
如果您使用布局,则可能会真正破坏您的布局,因此您可以使用带有imageLabel和empty label的QStackedWidget,并每秒更改它。我认为这仍然比每秒设置空像素图或图像要好。选择最适合您的方法。

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


2
根据QLabel周围的布局,这段代码可能不仅仅是闪烁:还会以一种不希望的方式移动其他小部件。 - Antwane
1
@Antwane 是的,你说得对,OP没有提到布局,但这真的很危险,所以我改进了我的答案。 - Jablonski
你可以在一行代码中完成这个操作:label->setVisible(!label->isVisible()); - Timmmm

0
在你的类中使用一个布尔成员isQLabelVisible
Class::blink() {
    if(isQLabelVisible) {
        doHideQLabel();
        isQLabelVisible = false;
    } else {
        doShowQLabel();
        isQLabelVisible = true;
    }
}

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

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

你已经有一个很好的解决方案的起点了。现在,要实现do{Hide,Show}QLabel(),请阅读这个问题的答案,并决定哪一个最适合你的需求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接