2010-12-02 12 views
3

QObject :: children()メソッドは、qObjectListの子を含むQObjectListへのconst参照を返すことに気付きました。定数を取り除き、リストをqSortでソートするのは安全でしょうか?たぶんQObjectの子の並べ替え

おかげ アントン

答えて

3

いいえ、これを行うべきではありません。これは、QObject :: children()の定義です。

inline const QObjectList &children() const { return d_ptr->children; } 

これは、内部オブジェクトリストの参照を直接取得することを意味します。 およびドキュメントは言う: QWidgetの子供を上げたり が低下しているときに、リストの順序が変わること

注意を。 が呼び出されたウィジェットがリスト内の最後のオブジェクトになります。 ウィジェットが下げられると、リスト内の最初のオブジェクトは になります。

このリストを混乱させるのは悪い考えです。

+0

QObject :: lower()らのコードをチェックしました。彼らが実際にこのリストを手作業で並べ替えるのは、私がやっているのと同じようです。違いはQWidgetはQObjectのフレンドであるため、QWidgetはdpimplポインタにアクセスできるため、constなしでQObjectListにアクセスできます。私は実際にこのアプローチを試してみる...悪いことが起こった場合、私はここに投稿します。 –

1

。しかし、なぜそれを危険にさらしますか? QObjectListをコピーしてローカルコピーをソートできませんか?

+0

まあ、いくつかの理由があります。ツリーを形成するQObjectの派生クラスをいくつか持っています。何らかの方法でソートしたいと思っています。コピーを保存する方法はありますが、いくつかの問題が発生します。1)子供が追加/削除されるときにローカルコピーを最新の状態に保つ必要があります。 2)QObject :: children()を呼び出して子を取得することはできません。派生クラスに特別な関数を導入する必要があります(これらのクラスはQObject以外の基本クラスを共有しません)。 。 –