0

私はこれを理解し始めていると思いましたが、そうではないようです。

スタックされたウィジェットを接続して、子が親にメッセージを送信してビューを変更するように指示できるようにしようとしています。QStackedWidgetはメインウィンドウの子であり、そのページは私が自分で作成したフォームに昇格します。それが正しい方法だと思いますか?

したがって、子フォームの1つで、次のことを試しました。

// Set up a mapping between the buttons and the pages
QSignalMapper *mapper = new QSignalMapper(this);

mapper->setMapping(ui->automatedButton, 1); // Value of the index
connect(ui->automatedButton, SIGNAL(clicked()), mapper, SLOT(map()));

connect(mapper, SIGNAL(mapped(int)), ((QStackedWidget*)parentWidget()), SLOT(setCurrentIndex(int)));

しかし、それはうまくいかないようです。ボタンをクリックしても何も変わりません。しかし、私がこれを行う場合:

void MySelectionForm::on_automatedButton_clicked()
{
    ((QStackedWidget*)parentWidget())->setCurrentIndex(1);
}

以前と同じだと思ったのはどれですか?

実行時にメッセージが表示されますが、これは関連付けられていると思います。

QObject::connect: Cannot connect QSignalMapper::mapped(int) to (null)::setCurrentIndex(int)
4

2 に答える 2

3

電話しparentItem()ても返ってこないことを確認しましたか?親アイテムがコンストラクターのに設定されているように思えますが、これは実際に を返すことを意味します。それが Qt Designer のロール方法であると思われます。その場合、シグナル/スロットをコンストラクターの外側、別のメソッド (コンストラクター内で呼び出されないメソッド)、または完全に子の外側で接続する必要があります。NULLQObject::connect()parentItem()NULL

于 2012-05-24T13:35:48.377 に答える
1

メッセージによると、

((QStackedWidget*)parentWidget()), SLOT(setCurrentIndex(int)));  

につながる

(null)::setCurrentIndex(int)

つまりparentWidget()ですNULL

これは基本的に、フォームが の子ではないことを意味しQStackedWidgetます。フォームを手動で作成する場合は、次のようにする必要があります

MyForm *form = new MyForm( ui->stackedWidget );
于 2012-05-24T14:23:38.903 に答える