Q维扎德:后退按钮上的确认

QWizard: Confirmation on back button

本文关键字:按钮 确认      更新时间:2023-10-16

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

我想在用户按">

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

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

但是,当按下返回时,我不知道有什么方法可以说"不要回去"。虚拟函数void cleanupPage()被调用(我可以在这里要求用户确认(,但向导还是会返回。

可以这样做吗?

提前谢谢。

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

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 在传递第一页时连接它(。

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