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

neu*_*rte 5 c++ qt

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

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

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

const QIcon Sequence::treeIcon_ = QIcon(":/icons/seq.png");
Run Code Online (Sandbox Code Playgroud)

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

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

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

Pet*_*ete 4

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

static QIcon getSeqIcon() {
    static QIcon icon = QIcon(":/icons/seq.png");
    return icon;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 您始终可以在树填充函数中将其设为静态。这可能没问题,因为绘画设备可能只用于创建,而不是破坏 QIcon。 (2认同)