2016-08-21 14 views
0

私はMainWindowクラスでqstackedwidgetを使用しています。別のクラス(PageLayouts)でウィジェットを定義しているので、物事を分かりやすくしています。しかし、私はMainWindowクラスのオブジェクト間の接続を行っています(変更ページ...)、これは失敗します。基本的に:StackedWidgetでFindChildメソッドが失敗する

//mainwindow.cpp 
.... 

QSignalMapper * SM = new QSignalMapper(); 
Layouter = new PageLayouts();     
//Instance of the class which contains the widgets 

QStackedWidget * Stack = new QStackedWidget(); 
Stack->addWidget(Layouter->getPage1()); 

connect(SM, SIGNAL(mapped(int)), Stack, SLOT(setCurrentIndex(int))); 
SM->setMapping(Stack->widget(0)->findChild<QPushButton *>("Btn_ToPage2"), 1); 

connect(Stack->widget(0)->findChild<QPushButton *>("Btn_ToPage2"), SIGNAL(clicked(bool)), SM, SLOT(map())); 
.... 

//Debugging says to the first connect: 
QObject::connect: Cannot connect (null)::destroyed() to QSignalMapper::_q_senderDestroyed() 

//To the second: 
QObject::connect: Cannot connect (null)::clicked(bool) to QSignalMapper::map() 

私は、findchildメソッドでPushButtonを適切に取得しないとします。 私の質問は以下の通りです:

  1. スタックウィジェット内のウィジェットの子供たちを入力するにはどうすればいいですか?
  2. まだIMは積み重なったウィジェットで実験を行っているので、もっと使いやすい方法がありますか?

おかげで、セバスチャン

編集1:

class PageLayouts 
{ 
QWidget * Page1; 
QWidget * Page2; 

public: 
PageLayouts(); 

//Get 
QWidget * getPage1(); 
.... 

そしてpagelayouts」でのPage1を生成するコード:

ここで "pagelayouts.h" でのPage1を生成するコードです。 cpp ":

PageLayouts::PageLayouts() 
{ 
//Page1 
QHBoxLayout * HL_112 = new QHBoxLayout(); 
QVBoxLayout * VL_122 = new QVBoxLayout();        

QLabel * Lbl_NamePage1 = new QLabel("Page 1"); 
QPushButton * Btn_ToPage2 = new QPushButton("Page 2"); 
QPushButton * Btn_Close1 = new QPushButton("Close"); 

//Assembling of Page1 
VL_122->addWidget(Btn_ToPage2); 
VL_122->addWidget(Btn_Close1); 
HL_112->addWidget(Lbl_NamePage1); 
HL_112->addLayout(VL_122); 

Page1 = new QWidget(); 
Page1->setLayout(HL_112); 

//Page2 
.... 
} 

QWidget* PageLayouts::getPage1() 
{ 
return Page1; 
} 

それは実験的なコードですが、私はさらなる設計決定のためにqstackedwidgetsをテストしています。誰かがこの問題を解決できることを願っています。

+1

あなたはページ1とそのボタンが作成されたコードの一部を示してもらえますか? – jpnurmi

+0

Okはそれを編集しました。 – Hyperhyper

答えて

0

名前として「Btn_ToPage2」をQObject::findChild()に渡しています。変数の名前はBtn_ToPage2ですが、オブジェクト名を設定されていません。

Btn_ToPage2->setObjectName("Btn_ToPage2"); 
+0

はい、これで解決しました。ありがとう! – Hyperhyper

関連する問題