2012-04-13 8 views
1

私はQStackedWidgetといくつかのQPushButtonボタンを持っています。ウィジェットの親ウィジェットはQMainWindowです。 QStackedWidgetの中にはQLineEditもあります。私がしたいのは単純です:テキストボックスを含むフォームを検証し、すべての場合、データを処理するカスタムクラスの関数を呼び出します。クラスのインスタンスはQMainWindowクラス内に作成されます。そのクラスのメソッドを呼び出す最良の方法は何でしょうか?カスタムクラスをQStackedWidget内のウィジェットのインスタンスに接続するQtのシグナル/スロットメカニズムを使用する必要がありますか?Qtを使って親ウィジェットの機能を呼び出す

答えて

3

QValidatorから必要な回数だけ派生させ、検証が必要な各フィールドにバリデーターをインストールすることができます。この方法では、フィールドが空であるか、有効なエントリが含まれていることが保証されます。

データを処理する前に、該当するフィールドにすべてデータが含まれていることを確認してから、有効なフォームがあることを保証してください。

フォームデータの一部のコンシューマにデータを渡す一般的な方法は、データを保持する中間マンクラスを作成することです。フォームの検証後にクラスのインスタンスが作成され、インスタンスがコンシューマに渡されます。このようにして、フォームに変更がある場合、消費者は同じデータが収集されている限り、これらの変更から隔離されます。

一般的な規則は、実装ではなく、オブジェクトインターフェイスに対して作業することです。

Sig/slotは通話の発注を保証するものではなく、本質的にこれを見ることができるということを意味します。オブジェクトはその信号に接続し、この変更を選択することができます。 は、サブコンポーネントによるフォームデータの処理順序が保証されている必要がある場合、メンテナンスプログラマーに混乱させるオプションを与えるのはなぜですか?

第2に、オブジェクトが存在するは、である必要はありません。データコンシューマが非常に複雑になり、シナリオ(ユーザーの個人情報や今日の日付、現在の気温など)に基づいて別のものをスナップしたい場合は、再アーチをしたい。コンシューマーにデータを取得するためのロジックが、フォーム内の特定の方法で存在するオブジェクトに大きく依存する場合、それは間違っています。

+0

データを検証した後、これらのデータをカスタムクラスに渡す必要があります。この場合適切なシグナル/スロットシステムですか、それとも別のものを使用すべきですか? – Stefano

+0

@Stefanoデータが検証されたポイントの後に、どの信号/スロットがこれと関係しているのか分かりません。しかし、あなたはそれをすることができます。すべてのフィールドに有効なデータがあるかどうかを調べて調べるには、信号/スロットが必要な場合があります。それはあなたのアーキテクチャに依存します。 –

+0

基本的に、親QWidgetクラスの内部に独自のインスタンスを持つカスタムクラスメソッドに検証データを渡す最善の方法はありますか? – Stefano

関連する問題