Есть несколько способов сделать это немного чище. Одним из способов является то, что вы можете изменить мастер так, чтобы он брал указатель на класс MyMainWindow. Тогда вы можете сделать подключение немного чище.
class Page : public QWizardPage
{
public:
Page(MyMainWindow *mainWindow, QWidget *parent) : QWizardPage(parent)
{
if(mainWindow)
{
connect(button, SIGNAL(clicked()), mainWindow, SLOT(launchWidgetOne()));
} else
{
qDebug() << "Super informative debug message";
}
}
// other members, etc
};
Гораздо более простой дизайн - просто распространять сигнал вверх. В конце концов, если нажатие этой кнопки важно для родителя, пусть родитель справится с этим:
class Page : public QWizardPage
{
public:
Page(QWidget *parent) : QWizardPage(parent)
{
connect(button, SIGNAL(clicked()), this, SIGNAL(launchWidgetOneRequested()));
}
signals:
void launchWidgetOneRequested();
};
void MyMainWindow::showWizard() // or wherever you launch the wizard
{
Page *p = new Page;
QWizard w;
w.addPage(p);
connect(p, SIGNAL(launchWidgetOneRequested()), this, SLOT(launchWidgetOne()));
w.show();
}
Я настоятельно рекомендую второй подход, так как он уменьшает сцепление, когда ребенок должен знать подробности родителя.