私は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を適切に取得しないとします。 私の質問は以下の通りです:
- スタックウィジェット内のウィジェットの子供たちを入力するにはどうすればいいですか?
- まだ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とそのボタンが作成されたコードの一部を示してもらえますか? – jpnurmi
Okはそれを編集しました。 – Hyperhyper