3

我有两个带有图像的 Q 标签,我需要每隔几秒钟闪烁一次。

我不明白如何使用 QLabel 来实现它。

我现在拥有的截图:

示例截图

4

2 回答 2

3

创建一个 QTimer,将 timeout() 信号连接到一个插槽,然后在插槽中你可以对你的 QLabel 做任何你想做的事情!

myclass.h:

class MyClass : public QWidget
{
    Q_OBJECT
public:
    explicit MyClass(QWidget *parent = 0);

public slots:
    void timeout();

private:
    QTimer  *timer;
    QLabel  *label;

    int     counter;
};

我的类.cpp:

#include "myclass.h"

MyClass::MyClass(QWidget *parent) :
    QWidget(parent)
{
    timer = new QTimer();

    label = new QLabel();

    counter = 0;

    connect(timer, SIGNAL(timeout()), this, SLOT(timeout()));

    timer->start(1000);
}

void MyClass::timeout()
{
    if(counter%2)
        label->setText("Hello !");
    else
        label->setText("Good bye...");
    counter++;
}
于 2013-08-05T12:39:49.043 回答
1

我已经为 QLabel 修改了您链接到的示例代码:

#include <QtGui>

class BlinkLabel : public QLabel
{
  Q_OBJECT
  public :
  BlinkLabel(QPixmap * image1, QPixmap * image2)
  {
    m_image1 = image1;
    m_image2 = image2;
    m_pTickTimer = new QTimer();    
    m_pTickTimer->start(500);

    connect(m_pTickTimer,SIGNAL(timeout()),this,SLOT(tick()));
  };
  ~BlinkLabel()
  {
    delete m_pTickTimer;
    delete m_image1;
    delete m_image2;       
  };

  private slots:
    void tick()
    {
      if(index%2)
      {
        setPixMap(*m_image1);
        index--;
      }
      else
      {
        setPixMap(*m_image2);
        index++;
      }      
    };    
  private:
    QTimer* m_pTickTimer;
    int index;
    QPixmap* m_image1;
    QPixmap* m_image2;
};

然后你需要做的就是像这样创建一个 BlinkLabel 的实例:

QPixmap* image1 = new QPixmap(":/image1.png");
QPixmap* image2 = new QPixmap(":/image2.png");
BlinkLabel blinkLabel = new BlinkLabel(image1, image2); // alternates between image1 and image2 every 500 ms
于 2013-08-05T12:47:40.657 回答