私はQHash
あなたのニーズにぴったりのツールだと思います。これにより、一意のキーを介してほとんどすべてのものを保存および検索できます。つまり、タイトルをキーとしてウィジェットを保存し、後でそのハッシュから特定のタイトルのウィジェットを取得できます。
このようなハッシュを定義する方法は次のとおりです。
// .h file
#include <QtCore/QHash>
#include <QtGui/QWidget>
class MyWidget : public QWidget
{
// ...
private:
QHash< QString, QWidget* > m_dynamicWidgetHash;
};
タイトルが常に一意であると仮定すると、ウィジェット(または任意のQWidgetサブクラス)を次のようにハッシュに格納できます。
// .cpp file
void MyWidget::someMethod()
{
QList< QString > widgetTitles = getWidgetTitlesFromSomewhere();
foreach( QString title, widgetTitles )
{
SomeWidgetSubclass* widget = new SomeWidgetSubclass( this );
widget->setTitle( title );
// Note: This will not work if two widgets can have the same title
Q_ASSERT( !m_dynamicWidgetHash.contains( title ) );
m_dynamicWidgetHash.insert( title, widget );
}
}
その後、次のような名前だけを知っているウィジェットを見つけることができます。
// .cpp file
void MyWidget::someOtherMethod( const QString& title )
{
SomeWidgetSubclass* widget = m_dynamicWidgetHash.value( title );
if( !widget )
{
// TODO: Error Handling
return;
}
// Do whatever you want with the widget here
}