5

私はかなり基本的なQtの問題を抱えていると思いますが、それを理解することはできません:

QStackedWidgetを保持するQMainWindowがあります。そこにあるすべてのページウィジェットには、QWidgetから派生した個別のクラスがあります。

それで:

QMainWindowは、QStackedWindowを1つのクラスに実装します。スタックウィジェット内の他のすべてのページには追加されたクラスがあり、すべてのページには、Designerを介したボタンとリストで満たされた独自の.uiがあります。

別のページに移動するために、メインウィンドウ内で次の場所にアクセスできます。ui.stackedWidget->setCurrentIndex(2);

スタックウィジェット内の別のページにあるui.stackedWidgetにアクセスできないようです。Uiはメインウィンドウクラスのプライベートメンバーであるため、ui.stackedWidgetにアクセスできません。(Qtによって自動生成-QT4クラスを追加するためにVSアドオンを使用)

このウィジェット内の別のページに属するボタンをクリックしたときに、スタックウィジェット内の別のページにジャンプするにはどうすればよいですか?

ノート:

すべてのページは、mainWIndowのコンストラクターのStackedWidgetに追加されます。

ui.stackedWidget->addWidget(page1Widget);
ui.stackedWidget->addWidget(page2Widget);
// etc..

page1Widget内のボタンクリック信号スロットの例:

connect(ui.btnViewData, SIGNAL(clicked()), this, SLOT(viewData()));

::viewData() 
{   
   // navigate to another page here. 
   // note: ui.stackedWidget->setCurrentIndex(3); is not accessible here!
}
4

1 に答える 1

4

メインウィンドウは、子ウィジェットによって発行されたシグナルと QStackedWidget アイテムの両方にアクセスできるため、 connect() および viewData() 関数を QMainWindow オブジェクト内に配置すると問題が解決すると思います。

ページごとに Ui ゲッターを作成し、次のようにする必要がある場合があります。

connect(page1Widget->getUi().btnViewData, SIGNAL(clicked()), this, SLOT(viewData)));

それが役立つことを願っています、乾杯

于 2013-02-25T13:51:21.460 に答える