C++ QWizard:返回确认按钮

C++ QWizard:返回确认按钮,c++,qt,C++,Qt,我通过子类化QWizard创建了一个向导,并且通过子类化QWizardPage创建了向导的页面 我想在用户按下后退按钮时显示一个确认对话框,如果用户在确认对话框上按下否,我希望我的向导不会转到上一页 在QWizard对话框上单击Next时,将调用虚拟函数bool validatePage(),如果我们不想转到下一页(例如,当存在不完整的字段时),则允许返回false 然而,当按下“返回”按钮时,我不知道如何说“不要返回”。调用了虚拟函数void cleanupage()(我可以在这里请求用户确认

我通过子类化QWizard创建了一个向导,并且通过子类化QWizardPage创建了向导的页面

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

在QWizard对话框上单击Next时,将调用虚拟函数
bool validatePage()
,如果我们不想转到下一页(例如,当存在不完整的字段时),则允许返回false

然而,当按下“返回”按钮时,我不知道如何说“不要返回”。调用了虚拟函数
void cleanupage()
(我可以在这里请求用户确认),但向导仍将返回

有可能吗

提前感谢。

尝试使用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);
}

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

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();
}

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

谢谢,但这不起作用(它仍返回…),这将禁用已单击的返回按钮。