У меня возникают трудности с пониманием того, как сигналы и слоты используются в Qt. Я уверен, что это действительно простой, но я просто не понимаю его сегодня.
У меня есть набор виджетов примерно так:
MainWindow → StackedWidget → ChildForms
Теперь идея состоит в том, что в дочерних виджетах есть некоторые действия, которые заставят многоуровневый виджетов отображать другую страницу.
Поэтому, если я правильно понимаю, я думал, что способ подключения сигналов и слотов - использовать connect()
в области, которая знает об объектах, но то, что мне удалось получить, не делает этого таким образом. На данный момент в моей дочерней форме я использую parentWidget() для доступа к слоту StackedWidget, но я не очень доволен тем, что он предоставляет дочернюю информацию о родителе, которого он не должен иметь:
void TaskSelectionForm::setButtonMappings()
{
// Set up a mapping between the buttons and the pages
QSignalMapper *mapper = new QSignalMapper(this);
connect(mapper, SIGNAL(mapped(int)), parentWidget(), SLOT(setCurrentIndex(int)));
mapper->setMapping(ui->utilitiesButton, 2); // Value of the index
connect(ui->utilitiesButton, SIGNAL(clicked()), mapper, SLOT(map()));
}
Но я не совсем уверен, как это сделать и подключить его. Нужно ли мне иметь сигналы на каждом уровне и излучать через дерево?