2010-10-22 93 views
1

我试图使用静态字段QTQT4如何使用静态字段?

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

我在回复你的问题,因为它与C++相关的更多 – 2010-10-22 06:48:07

+2

请检查你的问题并接受答案。如果他们看到你不明白他们的帮助,他们不会帮助你 – 2010-10-22 07:24:46

+0

我认为这个问题仍然是QT特有的。我没有使用静态int字段的问题 – Astronavigator 2010-10-22 13:30:37

回答

3

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

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

+0

如果你想编辑你的答案,包括初始化静态的一般信息和QPixmaps的例外情况,我会删除我的答案,所以它在一个地方。 – 2010-10-22 14:22:14