我的目标是要有两个按钮“取消”和“连接”,并在用户按下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

10-06 14:33