QT4如何使用静态字段?

时间:2010-10-22 01:48:14

标签: c++ qt qt4

我正在尝试在QT中使用静态字段

class MyLabel:public QLabel{
    Q_OBJECT
public:
  static QPixmap pix1;
  static QPixmap *pix2;
  static int WasInited;
  ...
};

int MyLabel::WasInited = 0;

MyLabel::MyLabel(){
  . . . 
  if (WasInited==0)  pix1.load("pic.png");   // Error
  if (WasInited==0)  pix2->load("pic.png");  // Error
  WasInited=1; // Here using static field is OK

}

但我总是得到“未定义的对MyLabel :: pix *'的引用”错误

如何声明和使用标准QT类的静态字段?

P.S。我使用int静态字段没有问题,所以我认为我的问题是QT特定的

1 个答案:

答案 0 :(得分:3)

静态字段就像类中的方法一样。首先,您需要声明它们,然后您需要定义它们的初始值。

使用QPixmaps,它有点不同。由于静态成员在主入口点之前初始化。 QPixmap要求QApplication工作,因此您将无法将其作为变量静态,但您可以将其作为指针静态化。您还需要“定义”静态成员。通过定义你声明它的初始值。在这两种情况下,它都是NULL,因为您仍然无法创建QPixmap。您可以在类的内部构造函数中检查指针是否为NULL,如果是,则可以使用适当的值初始化它们。