首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QWizard: back按钮上的确认

QWizard: back按钮上的确认
EN

Stack Overflow用户
提问于 2017-07-07 12:29:11
回答 2查看 805关注 0票数 2

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

当用户按下Back按钮时,我想显示一个确认对话框,如果用户在确认对话框中按no,我希望向导不要转到上一页。

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

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

是否可以这样做呢?

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-07-07 17:27:40

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

代码语言:javascript
复制
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连接它)。

票数 3
EN

Stack Overflow用户

发布于 2017-07-07 12:57:26

尝试使用void::setCommitPage(Bool commitPage)函数来实现它。此函数防止用户返回页面。在向导的cleanupPage()上设置它:

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44970801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档