dgrant
dgrant

Reputation: 1427

How to change the default QPushButton in a QDialogBox

My goal is to have two buttons, "Cancel" and "Connect", and to have Cancel be the default button when the user presses ENTER. I also want the user to be able to TAB to the next button ("Connect") and press ENTER and have "Connect" get pushed. Here's my code:

    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);

Setting the Cancel button to the the default button doesn't actually seem to work.

Setting the autoDefault property on all the butons seems to be necessary in allow the buttons to get pushed after pressing TAB and ENTER for example. This seems to jive with the documentation for autoDefault. However, the documentation for the default property seems to indicate that the default button will get pushed only if there are no buttons that have the autoDefault property set. Otherwise, the button that gets pushed when ENTER is pressed will be the currently selected autoDefault button. So it seems like what I need to do is to make the cancelButton have focus by default, but I can't seem to figure out how to do this.

Upvotes: 1

Views: 3643

Answers (2)

alexisdm
alexisdm

Reputation: 29896

You have to call cancelButton->setFocus(); after adding the buttons to the QDialogButtonBox, not before.

Upvotes: 4

Hiren
Hiren

Reputation: 341

Try adding below line before you call dialog->show

button->isEnabled(true)

Upvotes: -1

Related Questions