2012-04-09 226 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