0

QObjectツリー削除メカニズムを使用して、リストとリストQObjectに保存されているすべてのを削除しようとしています。Qtはまだ私の週の領域です...

QList<QObject*>* list = new QList<QObject*>();
QObject* obj1 = new QObject();
QObject* obj2 = new QObject();
obj1->setParent(obj2);
obj2->setParent((QObject*)list);

最後の行で「セグメンテーション違反」が発生しました。QList親として使えませんか?から継承していませんQObjectか?

編集

QList主な質問 -クラスを拡張せずにリストとすべてのリスト要素を便利に削除することは可能ですか? これはクライアントによって呼び出される必要があるため、単純にする必要があります。

私は単に呼び出したい:

delete list;

そしてそうではない

qDeleteAll(list);
delete list;
4

2 に答える 2

1

No. QListは から継承されませんQObject。リストの内容を簡単に削除したい場合は、 を使用できますqDeleteAll(list)

編集: これはテストされておらず、仮想デストラクタを持たない基本クラスに問題がある可能性がありますが、前に与えてください。

template < class T >
class MyList : public QList< T >
{
    static_assert( std::is_pointer< T >::value,
                   "T must be a pointer." );
    //  Constructors...
    ...
    virtual ~MyList() { qDeleteAll( *this ); }
 }
于 2013-04-22T09:07:25.110 に答える