1

データベースから情報を読み取り、それに応じてレイアウトを設定するプログラムを作成しようとしています。具体的には、2 つの日付フィールドを読み取り、日数の違いに応じて日数の要素を作成したいと考えています。これをどのように行うことができるかについて、誰かが考えを持っていますか? QString->text() プロパティを使用して要素を作成しようとしましたが、明らかな理由で成功しませんでした。要素を作成する関数を書くことはできましたが、問題は、要素の名前を制御できないことです。 C ++に関する私のゴミの知識では、特定の要素とやり取りすることは不可能です。

お時間をいただきありがとうございます。

乾杯。

4

2 に答える 2

3

私は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
}
于 2012-10-15T06:28:04.923 に答える
1

また、を使用してクラス名でオブジェクトを作成する方法にも興味があるかもしれませんQMetaType。方法がありQMetaType::constructます。qRegisterMetaType関数を前に呼び出す必要があります。詳細な説明はこちらです。

于 2012-10-15T09:04:48.830 に答える