如何查看我的QLabel中设置的图像?

时间:2014-08-11 12:07:08

标签: c++ qt user-interface

我有一个Qt应用程序,我需要显示一个闪烁的LED,为此我需要使用off和on led的一些png图像。我创建了一个Qlabel并使用setstylesheet来显示图像。我创建了一个计时器并将信号连接到插槽。
现在的问题是如何知道当前显示的图像是否为OFF led or ON led

我在GUI中有很多人,所以有没有更好的方法来检查这个?

2 个答案:

答案 0 :(得分:4)

不要费心去比较图像,只需存储LED状态的变量即可。当计时器触发时,您可以更改变量的状态并相应地设置QImage。

// assuming a boolean variable
var = !var;
if(var)
   label->setImage(":/images/imageOn"); 
else
   label->setImage(":/images/imageOff");

这假设图像imageOn和imageOff已添加到Qt资源文件中,并且位于“images”前缀下。

将逻辑与其直观表示分开是一种很好的做法。

答案 1 :(得分:0)

您可以利用属性机制存储要使用的下一个图像的索引。 QLabel是一个QObject。对象可以为其分配任意属性。

您也无需使用样式表在标签上设置图像。这是一个过早的悲观,因为每次设置样式表都需要进行解析。如果您没有将样式表用于其他目的,要在标签上设置图像,只需使用setPixmap

例如(Qt 5,C ++ 11):

#include <QApplication>
#include <QTimer>
#include <QLabel>
#include <QImage>
#include <QPainter>

void blink(QLabel * label, const QList<QImage> & images)
{
  const char * const prop = "imageIndex";
  Q_ASSERT(!images.isEmpty());
  if (label->property(prop).isNull()) {
    // We're setting the image for the first time
    label->setProperty(prop, images.size());
  }
  int i = (label->property(prop).toInt() + 1) % images.size();
  label->setPixmap(QPixmap::fromImage(images[i]));
  label->setProperty(prop, i);
}

QImage textImage(const QString & text, int size = 64)
{
  QImage image(size, size, QImage::Format_ARGB32_Premultiplied);
  image.fill(Qt::transparent);
  QPainter p(&image);
  p.setFont(QFont("helvetica", 20));
  QTextOption opt;
  opt.setAlignment(Qt::AlignCenter);
  p.drawText(image.rect(), text, opt);
  return image;
}

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  QList<QImage> images;
  QLabel label;
  QTimer timer;

  images << textImage("0") << textImage("1") << textImage("2") << textImage("3");
  blink(&label, images);
  timer.start(250);
  QObject::connect(&timer, &QTimer::timeout, [&]{ blink(&label, images); });

  label.show();
  return a.exec();
}