2012-04-09 154 views
1

我的目標是當用戶按下ENTER時有兩個按鈕「取消」和「連接」,並將取消作爲默認按鈕。我也希望用戶能夠TAB到下一個按鈕(「連接」),然後按ENTER鍵並讓「連接」被按下。這裏是我的代碼:如何更改QDialogBox中的默認QPushButton

QPushButton * cancelButton = new QPushButton(tr("&Cancel")); 
    cancelButton->setAutoDefault(true); 
    cancelButton->setDefault(true); 
    cancelButton->setFocus(); 

    QPushButton * continueButton = new QPushButton(tr("Co&nnect")); 
    continueButton->setAutoDefault(true); 
    continueButton->setDefault(false); 

    ui->buttonBox->addButton(cancelButton, QDialogButtonBox::RejectRole); 
    ui->buttonBox->addButton(continueButton, QDialogButtonBox::AcceptRole); 

取消按鈕設置爲默認按鈕實際上並不似乎工作。

在所有按鈕上設置autoDefault屬性似乎是必要的,例如允許在按TAB和ENTER之後按鈕被按下。這似乎與autoDefault的文件jive。但是,default property的文檔似乎表明僅當沒有設置了autoDefault屬性的按鈕時纔會推送默認按鈕。否則,按下ENTER鍵時按下的按鈕將成爲當前選中的autoDefault按鈕。所以看起來我需要做的是讓cancelButton默認擁有焦點,但我似乎無法弄清楚如何做到這一點。

回答

4

將按鈕添加到QDialogButtonBox之後(而不是之前),您必須撥打cancelButton->setFocus();

+0

謝謝,這做到了。我需要在將按鈕添加到QDialogBu​​ttonBox之後執行此操作,正如您所說的那樣,而不是之前。 – dgrant 2012-04-10 07:45:09

0

嘗試添加下面一行打電話之前對話框 - >顯示

button->isEnabled(true) 
+2

按鈕默認啓用。而'isEnabled()'只能檢查。你可能是指'setEnabled(bool)'。 – RedX 2012-04-10 06:45:27