我的目标是要有两个按钮“取消”和“连接”,并在用户按下ENTER键时将“取消”作为默认按钮。我还希望用户能够将TAB移至下一个按钮(“连接”)并按Enter,然后按下“连接”。这是我的代码:
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的文档结合在一起。但是,default property的文档似乎表明只有在没有设置autoDefault属性的按钮时,默认按钮才会被按下。否则,按下ENTER键时将被按下的按钮将是当前选择的autoDefault按钮。因此,似乎需要做的是默认使cancelButton具有焦点,但是我似乎无法弄清楚该如何做。
最佳答案
您必须在将按钮添加到cancelButton->setFocus();
之后而不是之前调用QDialogButtonBox
。