【问题标题】:Make a QLabel blink让 QLabel 闪烁
【发布时间】:2014-11-17 14:51:34
【问题描述】:

我正在使用 Qt 为我的 beagleboard 制作一个 gui 应用程序。

我正在尝试使用自定义图像使 QLabel 闪烁。

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

我正在考虑使用 QTimer 每秒调用一次 blink() 函数,但我不知道 blink() 函数中的代码应该是什么。我希望有人可以提供帮助,因为我现在一直在努力解决这个问题。

【问题讨论】:

标签: c++ qt qlabel


【解决方案1】:

GIF 文件中创建闪烁动画。

使用GIF Animator 等工具创建您喜欢的任何动画。

如下所示:

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

【讨论】:

    【解决方案2】:

    最简单的方法是隐藏并再次显示。

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

    这种方法很好,因为您不需要一次又一次地设置图像,只需显示/隐藏它(设置空像素图或每秒设置图像不是有效的方法)。

    如果你使用布局,那么它真的会破坏你的布局,所以你可以使用带有 imageLabel 和空标签的QStackedWidget 并每秒更改一次。我认为它仍然比设置空像素图或每秒设置图像要好。选择最适合您的。

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

    【讨论】:

    • 根据 QLabel 周围的布局,这段代码可以做的不仅仅是眨眼:以不需要的方式移动其他小部件
    • @Antwane 是的,你是对的,OP 没有告诉布局但它真的很危险,所以我改进了我的答案。
    • 一行代码即可:label->setVisible(!label->isVisible());
    【解决方案3】:

    在课堂上使用布尔成员 isQLabelVisible

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

    您有一个好的解决方案的起点。现在,要实现do{Hide,Show}QLabel(),请阅读this question 的答案,然后决定哪一个最适合您的需求。

    【讨论】:

      猜你喜欢
      • 2019-04-02
      • 2012-08-20
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多