0

QWizard 内で一連の QWizardPage クラスを使用しています。これとは別に、情報を取得してデータベースから読み取るログイン ダイアログがあります。このデータベース情報は、作成した構造体に格納されます。

最善の方法で物事を実行したいので、できる限り密結合とグローバル データ (およびそれに対応するシングルトン) を避けたいと考えています。

まず、アプリケーションの初期化中にウィザードを作成し、シグナル/スロットを使用して構造体をウィザードに送信します。これはもちろん、ログイン フォームを作成するときにウィザードが存在する必要があることを意味します。もう 1 つの方法は、パブリック関数をウィザードに追加するか、コンストラクターを更新することです。ただし、これは、ウィザード ページを作成するときに、データをウィザード ページに渡す必要があることを意味します。おそらく、この質問に関連する部分の行に沿って、それを行うためのより良い方法はありますか:

もう 1 つは、ウィザードの特定の段階でデータベースから情報を読み取ることです。これを使用registerField()すると、これを行うのに良い方法のように思えますが、データベースから読み取った情報はウィジェットに保存されないため、他のページからこのデータにアクセスする方法がわかりません。これを行う方法はありますか?

どうもありがとう

4

2 に答える 2

1

アプリケーションのビジネス ロジックから GUI を分離することをお勧めします。データベースへのリクエストを処理するコントローラ クラスを追加してから、GUI を更新できます。

于 2012-06-19T14:28:56.187 に答える
1

おそらくこれを行うためのより良い方法がありますが、私がやったことは、コードでプロパティを作成し、registerFieldそれらに対して使用できることでした。ここの例は非常に単純ですが、これを行うことで、必要なものすべてに対して登録できます。「通常の」タイプではない、より複雑なプロパティを使い始めると、もう少し複雑になる可能性があると思います。

Q_PROPERTY(int settingID READ getSettingID)

public:
    int getSettingID() const;

次に、コードで:

registerField("test_setting", this, "settingID");

int TestSettingsWizardPage::getSettingID() const
{ 
    // Return the value here
}
于 2012-06-29T09:05:31.213 に答える