2017-07-07 76 views
2

我已经通过继承QWizard创建了一个向导,并且通过继承QWizardPage创建了我的向导页面。QWizard:后退按钮确认

我想显示一个确认对话框,当用户按下后退按钮,我想我的向导不要去前面的页面,如果用户按下在确认对话框中没有

当点击一个QWizard对话框接下来,虚函数bool validatePage()被调用,并允许返回false,如果我们不想进入下一个页面(例如,当有一个不完整的场)。

但是,当按返回,我不知道任何方式说“不要回去”。调用虚函数void cleanupPage()(我可以在这里要求用户确认),但向导无论如何都会返回。

有没有可能这样做?

在此先感谢。

回答

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); 
} 
+1

谢谢,但这不起作用(它仍然会返回...) – Arnaud

+0

这将禁用已经被点击的**返回**按钮。 – Arnaud

1

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

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连接它时,你传递的第一页)。