2011-11-15 4 views
3

내 클래스는 일련의 항목을 나타냅니다. 이러한 시퀀스는 여러 인스턴스가있을 수 있지만 항상 트리 구조의 일부로 GUI에 표시됩니다. 시퀀스는 트리에 데이터를 채우는 역할을하며 트리에는 자체 아이콘이 있습니다. 아이콘이 모든 시퀀스 동일하기 때문에, 내가 만든 그 정적 :Qt의 QIcon 인스턴스를 내 클래스의 정적 멤버로 가질 수 있습니까?

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

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

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

문제는 내가 응용 프로그램을 실행할 때, 그것과 충돌한다는 것입니다 :

QPixmap하십시오 QPaintDevice 이전의 QApplication을 구성해야 .

정적 멤버가 주 창 자체 전에 만들어지기 때문일 수 있습니다. 그래서 내 질문은 : QIcons 내 클래스의 정적 멤버로 가질 수 있습니까, 그렇다면, 어떻게?

답변

4

응용 프로그램 초기화 후에 호출하는 함수에서 정적 초기화를 사용할 수 있습니다.

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

그래도 응용 프로그램을 제거하기 전에 제거해야하는지 확실하지 않습니다. 그렇다면 정적 공유 포인터가 있고 응용 프로그램 종료시 수동으로 해제하십시오.

+0

너무 귀찮습니다. 나는 아이콘 경로로 정적 인 QStrings를 가질 것이고,이 경로로부터 트리 채우기 기능으로 그들을 즉시 생성 할 것이다. 어쨌든 시간에 비판적인 것은 아니며, 지적하고있는 것처럼, 다소 어색하고 불확실합니다. – neuviemeporte

+2

트리 작성 기능에서 항상 정적으로 만들 수 있습니다. 페인트 장치는 아마도 QIcon의 파괴가 아닌 창조에만 사용되기 때문에 아마 괜찮을 것입니다. – Pete

+0

그게 더 좋은 생각이야 :) – neuviemeporte

1

오류 메시지가 암시 하듯이, 나는 그렇게 생각하지 않습니다. 그러나 treeIcon_을 정적 포인터로 만들 수 있으며 QApplication의 하위 클래스 생성자에서 초기화해야합니다. 아마도 더 나은 것은 내부에서 필드로 만들고 qApp을 사용하면 내부에서 액세스 할 수 있습니다. Sequence

관련 문제