2017-07-07 165 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連接它時,你傳遞的第一頁)。