@PavelStrakhovが述べているように、 QObject::findChildren を使用すると遅くなる可能性があります。ただし、私が使用する 1 つの方法は、QList にオブジェクトを格納することと、QObject の親階層を持つことを組み合わせることです。これは、次のようなことを行うことに基づいています: -
class BaseObject : public QObject
{
Q_OBJECT
public:
static BaseObject* FindObject(unsigned int id); // find object by id
private:
unsigned int m_id;
static unsigned int s_nextId; // next id for a new BaseObject
static QList<QBaseObject*> s_objectsList; // list of all BaseObject-type instances
};
すべてのオブジェクトが、QObject ではなく BaseObject を継承するようになりました。新しいクラスが作成されると、BaseObject のコンストラクターがアイテムの ID を設定し、s_nextId をインクリメントして、最後にオブジェクトが s_objectsList に追加されます。オブジェクトの検索は、静的オブジェクト リストを検索するという単純な問題になりました。
これはあなたが開発しているアプリケーションの設計に合わないかもしれませんが、特に QGraphicsView / QGraphicsScene システムを使用している場合には、確かに役に立ちました。その場合、BaseObject は QGraphicsObject から派生します。
もちろん、多くの標準ウィジェットを使用している場合、それらすべてに対して新しいクラスを作成する必要はほとんどありませんが、一部の設計に適したオプションです。