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

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

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

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

问题是,当我运行该应用程序时,它崩溃并显示:



可能是因为静态成员是在主窗口本身之前创建的。所以我的问题是:是否可以将QIcons作为类的静态成员,如果可以,怎么做?

最佳答案

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

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

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

08-19 18:02