QT4 Как использовать статические поля? - PullRequest
1 голос
/ 22 октября 2010

Я пытаюсь использовать статические поля в 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 * '" error

Как мне объявить и использовать статическиеполя стандартных классов QT?

PS У меня нет проблем с использованием int статических полей, поэтому я думаю, что мой вопрос относится к QT

1 Ответ

3 голосов
/ 22 октября 2010

статические поля похожи на методы в классе.Сначала вам нужно объявить их, затем вам нужно определить их начальное значение.

С QPixmaps это немного по-другому.Как статические элементы инициализируются перед главной точкой входа.QPixmap требует, чтобы QApplication работал, поэтому вы не сможете сделать его статическим как переменную, однако вы можете сделать его статическим как указатели.Вам также необходимо «определить» статический член.Определив, вы объявляете его начальное значение.В обоих случаях это должно быть NULL, потому что вы все еще не можете создать QPixmap.Внутри конструктора вашего класса вы можете проверить, имеют ли указатели значение NULL, и если да, то вы можете инициализировать их правильными значениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...