是否有可能将Qt的QIcon实例作为我自己类的静态成员?

时间:2011-11-15 13:32:47

标签: c++ qt

我的班级代表一系列项目。可能存在许多此类序列的实例,但它们始终作为树结构的一部分显示在GUI中。序列负责使用其数据填充树,并且树中有自己的图标。由于所有序列的图标都相同,我将其设为静态:

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

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

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

问题在于,当我运行应用程序时,它崩溃了:

  

QPixmap:必须在QPaintDevice之前构建QApplication。

可能是因为静态成员是在主窗口本身之前创建的。所以我的问题是:是否有可能让QIcons成为我班级的静态成员,如果是的话,怎么样?

2 个答案:

答案 0 :(得分:4)

也许在应用程序初始化后调用的函数中使用静态初始化。

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

不确定您是否还需要在应用程序之前销毁它。如果你这样做,那么可能有一个静态共享指针,并在应用程序关闭时手动释放。

答案 1 :(得分:1)

正如错误消息所暗示的那样,我认为不是。但是,您可以使treeIcon_成为静态指针,并在QApplication的子类构造函数中初始化它。也许更好,将其设为QApplication内的字段,并使用qAppSequence内部访问