2011-07-27 23 views
0

QStackedLayoutについてお聞きしたいと思います。 今、私はQStackedLayout に追加され、いくつかのウィジェットを持っていると私はそのようなSTHをしたい: がするとページXへのユーザスイッチ、ページX.私はそれを行うことができますどのようにQT QStackedLayoutの問題

をリフレッシュ? リフレッシュ時に実行したいカスタムコードがあります ありがとうございました

+1

「ページXをリフレッシュする」とはどういう意味ですか? –

+0

データベースからデータを再度読み込み、 – Bear

答えて

1

私のコメントに基づいて、現在のページが変更されたときに生成される信号を探しているので、画面の基礎となるデータを更新できるようです。その場合、最大スロットをフックすることが望ましいでしょう。void QStackedWidget::currentChanged(int index)

+0

はい、私はこれを試しました。connect(stackwidget、SIGNAL(currentChanged(int))、X、マイスロット(update_from_db)); しかし、Xは何ですか? Thx – Bear

+0

Xは、スロットを実装するオブジェクトへのポインタになります。あなたが "slot(update_from_db)"を持っている場所; "SLOT(update_from_db(int)));" –

+0

私は{(接続(すべてのウィジェットのウィンドウ)のため (構文を無視する)、それはスロット を実装しかし、私は、私は前にこれを試してみました、今後 に示したされるオブジェクトを予測することはできませんオブジェクトである必要があります知っていますThx – Bear

2

すべての "ページ"はQWidgetベースのクラスです。ウィジェットが正しくペイントされない場合は、ウィジェットのコードをチェックする必要があります。一般的に、ページを切り替えると、目に見えるウィジェット自体が再描画されます。あなたのウィジェットがいくつかのイベントを処理しない場合、あなたは不具合を見ることができます。

とにかく、あなたの "ページ"を再描画する場合は、QWidget::update()または(ブルートフォース方式)QWidget::repaint()に電話する必要があります。

+0

+1と表示します。 'QWidget :: repaint()'はおそらく_使われていないはずです。あなたが慎重でなく、無限の再帰を引き起こす可能性もあります。 – gnud

+0

Thx。私はupdate()をオーバーライドするべきだと思う。 – Bear

+0

申し訳ありませんが、いいえ、update()をオーバーライドしないでください。私の答えを見てください。 –

1

私の意見では、この状況を処理する最良の方法は継承によるものです。仮想更新機能を持つQWidgetから派生したクラスを作成します。これをスタックウィジェットのすべてのページの基本クラスとして使用します。スタックされたウィジェットを含むクラスでは、スタックされたウィジェットのcurrentChanged(int index)信号にスロットを接続します。そのスロットで、現在のウィジェットqobject_castを基本型に取得し、成功した場合はその上でupdate関数を呼び出します。

スタックウィジェットのページである各クラスは、更新関数をオーバーライドし、必要に応じてその情報を更新する必要があります。

関連する問題