我的目标是有两个按钮,“取消”和“连接”,并在用户按下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);
将“取消”按钮设置为默认按钮实际上似乎不起作用。
在按下TAB和ENTER后按下按钮似乎需要在所有按钮上设置autoDefault属性。这似乎与autoDefault的文档有关。但是,default property的文档似乎表明只有在没有设置autoDefault属性的按钮时才会推送默认按钮。否则,按下ENTER时按下的按钮将是当前选择的autoDefault按钮。因此,我需要做的是默认情况下使cancelButton具有焦点,但我似乎无法弄清楚如何做到这一点。
答案 0 :(得分:4)
将按钮添加到cancelButton->setFocus();
后,您必须先致电QDialogButtonBox
,而不是之前。
答案 1 :(得分:0)
在调用dialog-> show
之前尝试添加以下行button->isEnabled(true)