如何更改QDialogBox中的默认QPushButton

How to change the default QPushButton in a QDialogBox

本文关键字:默认 QPushButton 何更改 QDialogBox      更新时间:2023-10-16

我的目标是有两个按钮,"取消"和"连接",并在用户按 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 属性的按钮时,才会按下默认按钮。否则,按下 ENTER 时按下的按钮将是当前选择的自动默认按钮。所以似乎我需要做的是让取消按钮默认有焦点,但我似乎不知道该怎么做。

您必须在

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

在调用对话框>显示之前尝试添加以下行

button->isEnabled(true)