1

我的目标是有两个按钮,“取消”和“连接”,并在用户按下 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的文档不一致。但是,默认属性的文档似乎表明只有在没有设置了 autoDefault 属性的按钮时才会推送默认按钮。否则,按下 ENTER 时按下的按钮将是当前选择的自动默认按钮。所以看起来我需要做的是让cancelButton默认具有焦点,但我似乎无法弄清楚如何做到这一点。

4

2 回答 2

4

您必须cancelButton->setFocus();在将按钮添加到 之后调用QDialogButtonBox,而不是之前调用。

于 2012-04-09T21:53:49.263 回答
-1

在调用 dialog->show 之前尝试添加以下行

button->isEnabled(true)
于 2012-04-10T06:37:32.070 回答