我正在尝试在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特定的
答案 0 :(得分:3)
静态字段就像类中的方法一样。首先,您需要声明它们,然后您需要定义它们的初始值。
使用QPixmaps,它有点不同。由于静态成员在主入口点之前初始化。 QPixmap要求QApplication工作,因此您将无法将其作为变量静态,但您可以将其作为指针静态化。您还需要“定义”静态成员。通过定义你声明它的初始值。在这两种情况下,它都是NULL,因为您仍然无法创建QPixmap。您可以在类的内部构造函数中检查指针是否为NULL,如果是,则可以使用适当的值初始化它们。