簡體   English   中英

如何檢查QLabel中設置了哪個圖像?

[英]How to check which image is set in my QLabel?

我有一個Qt應用程序,需要顯示一個閃爍的LED,為此我需要使用關閉和打開led的png圖像。我創建了一個Qlabel並使用setstylesheet來顯示圖像。 我創建了一個計時器,並將信號連接到插槽。
現在的問題是我怎么知道當前顯示的圖像是OFF led or ON led

我在GUI中有許多領導者,所以有沒有更好的方法來檢查這一點?

不要費力嘗試比較圖像,只需存儲LED狀態的變量即可。 當計時器觸發時,您將更改變量的狀態並相應地設置QImage。

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

假定圖像imageOn和imageOff已添加到Qt資源文件中,並且位於'images'前綴下。

好的做法是將邏輯與其視覺表示分開。

您可以利用屬性機制來存儲下一個要使用的圖像的索引。 QLabelQObject 對象可以具有分配給它們的任意屬性。

您也不需要使用樣式表在標簽上設置圖像。 這是過早的悲觀,因為每次設置樣式表時都需要對其進行分析。 如果您不將樣式表用於其他目的,只需使用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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM