Возможно ли иметь экземпляры Qt Qt в качестве статических членов моего собственного класса? - PullRequest
4 голосов
/ 15 ноября 2011

Мой класс представляет собой последовательность предметов. Таких последовательностей может быть много, но они всегда отображаются в графическом интерфейсе как часть древовидной структуры. Последовательность отвечает за заполнение дерева его данными, и у него есть собственный значок в дереве. Поскольку значок одинаков для всех последовательностей, я сделал его статическим:

class Sequence
{
public:
    Sequence() { }
    /* ... */

protected:
    QList<SeqItem *> items_;
    static const QIcon treeIcon_;
};

const QIcon Sequence::treeIcon_ = QIcon(":/icons/seq.png");

Проблема в том, что когда я запускаю приложение, оно вылетает с:

QPixmap: необходимо создать QApplication перед QPaintDevice.

Возможно, потому что статические элементы создаются перед самим главным окном. Поэтому мой вопрос: возможно ли иметь QIcons в качестве статических членов моего класса, и если да, то как?

Ответы [ 2 ]

4 голосов
/ 15 ноября 2011

Возможно использовать статическую инициализацию в функции, которую вы вызываете после инициализации приложения.

static QIcon getSeqIcon() {
    static QIcon icon = QIcon(":/icons/seq.png");
    return icon;
}

Не уверен, что вам также нужно уничтожить его перед применением. Если вы это сделаете, то, возможно, имеете статический общий указатель и освобождаете его вручную при завершении работы приложения.

1 голос
/ 15 ноября 2011

Как следует из сообщения об ошибке, я думаю, что нет.Однако вы можете сделать treeIcon_ статическим указателем и инициализировать его в конструкторе подкласса вашего QApplication.Возможно, даже лучше, сделайте это поле внутри QApplication и используйте qApp для доступа к нему изнутри Sequence

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