有几种方法可以让你做的更干净一点。一种方法是更改向导以获取指向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();
}
我强烈建议使用第二种方法,因为它减少了子级需要知道父级细节的耦合。