QWizard:后退按钮确认

时间:2017-07-07 12:29:12

标签: c++ qt

我通过继承QWizard创建了一个向导,我通过继承QWizardPage创建了我的向导页面。

我想在用户按后退按钮时显示确认对话框,如果用户按,我希望我的向导不会转到上一页在确认对话框上。

在QWizard对话框中点击下一步时,会调用虚拟函数bool validatePage(),如果我们不想转到下一页,则允许返回false(例如当有不完整的字段时。)

然而,当按返回时,我不知道该怎么说"不要回去"。调用虚函数void cleanupPage()(我可以在这里询问用户确认),但是向导仍然会返回。

是否可以这样做?

提前致谢。

2 个答案:

答案 0 :(得分:2)

我终于通过断开后退按钮信号并将其连接到我的自定义插槽来实现我想要的(不确定这是最好的方式......)。

MyWizard::MyWizard(QWidget *parent) : QWizard(parent)
{
   // [...]
   connect(this, SIGNAL(currentIdChanged(int)), this, SLOT(onPageChanged(int)));
}

void MyWizard::onPageChanged(int id)
{
    disconnect(button(BackButton), SIGNAL(clicked(bool)), 0, 0);
    connect(button(BackButton), SIGNAL(clicked(bool)), this, SLOT(onBackButtonClicked()));
}

void MyWizard::onBackButtonClicked()
{
    if (currentId() > Page_Intro && !confirmation(tr("Are you sure you want to go back?")))
        return;
    back();
}

请注意,如果在Wizard构造函数上进行连接/断开连接,则它不起作用(当您通过第一页时Qt连接它。)

答案 1 :(得分:0)

尝试使用 void QWizardPage :: setCommitPage(bool commitPage)函数执行此操作。此功能可防止用户返回页面。将它设置在向导的cleanupPage()上:

MyWizard::cleaupPage(int id) 
{
    //Test here if 'id' is the page that you want and the do the following

    if(QMessageBox::question(...) == QMessageBox::Yes)
       this->page(id)->setCommitPage(false);
    else
       this->page(id)->setCommitPage(true);
}