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