2009-11-09 14 views
18

Qtには.NETのデータバインディングと同等のものがありますか?.NETデータバインディングと同等のQtですか?

データベースの特定のエンティティを参照するQStringsをコンボボックスやその他のウィジェットに取り込みたいとします。しかし、QStringsで検索されるエンティティの独自のインデックスを構築することに基づいて、新しいコンボボックス選択やその他のスキームに基づいてデータベースを再度照会するのではなく、これらの文字列にデータをバインドできれば、より洗練されたものになります。

私が思いついたことは、これらのエンティティをQStringから派生させて、このようにウィジェットにプッシュすることですが、実際に試してみることはまだありません。私はそれが私がそれが欲しいと思うように動作するかどうかわからないし、それは厄介なハッキングのように思える。

データバインディングがない場合はどうすればよいですか?

ありがとうございます。

+8

+1、それは簡単でなければならないという考えをUI要素をデータベースやメモリ内のモデルにバインドすることは、Windowsの世界の外には決してありませんでした。 Qtシグナルを使用することは可能ですが、ボイラープレートコードはまだまだたくさんあり、非常に退屈です。( –

+0

これは実際には.Netより前の非常に古いアイデアです。私は1997年にOOFILEフォームフレームワークで使用していました。純粋なCコードを対象としたバインディングを生成する、以前のヴィンテージのAppMakerによって生成されたコード –

答えて

3

まあ、コンボボックスの場合は、モデルを設定できます。一般にQObjectの場合、接続するプロパティやプロパティに関連しないその他の信号には、通知信号を使用できます。私はそれを行う別の方法があると思いますが、私は思い出すことができません。

+0

Qtの初心者であり、モデルに関するあなたの提案がこれを行う最も簡単な方法のようです。私はこれがデータバインディングにはかなり醜いアプローチだと思っていますが、それは私が望む機能をもたらすと思われます。 –

+3

MVCフレームワークの下ではなくウィジェットのために働くQDataWidgetMapperを見ることを強くお勧めします。 – cheez

5

Qt Model/Viewクラス(QAbstractItemModelのベース)を使用していますが、ウィジェットがQAbstractItemViewを継承する必要があります(これはQTableViewなどのウィジェットです)。
QtモデルをQAbstractItemViewと共通の何もないウィジェットのセットにマップする場合は、別々のウィジェットをQtモデル/ビューインデックスにマッピングするQDataWidgetMapperを使用できます。しかし、とにかく、アーロンDigullaと言ったように、いくつかのボイラープレートのコードを書く必要があります...

6

コメントに記載されているユーザーには、お気軽にQDataWidgetMapperクラスを使用することができます。 これは、QAbstractItemModelに格納されているデータに任意のウィジェットをバインドする非常に簡単な方法です。

リンクされたページ上の例では、一般的に使用される入力ウィジェットに自分のデータモデルをリンクすることができますどのように、数行のコードで示しています。何らかの理由で

QDataWidgetMapper *mapper = new QDataWidgetMapper; 
mapper->setModel(model); 
mapper->addMapping(mySpinBox, 0); 
mapper->addMapping(myLineEdit, 1); 
mapper->addMapping(myCountryChooser, 2); 
mapper->toFirst(); 
関連する問題