Ответ 1
TL;DR
- В представлении пользовательского интерфейса Qt Creator выберите кнопку, которую вы хотите сделать нажатой для Enter.
- В правой части редактора свойств прокрутите вниз до синей части под названием
QPushButton
. - Установите флажок
autoDefault
илиdefault
.
В большинстве случаев основным отличием между autoDefault
и default
является то, как будет отображаться кнопка. Но есть случаи, когда это может вызвать неожиданные вещи, поэтому для получения дополнительной информации см. Ниже.
Полный обзор
Обзор
Каждый QPushButton
имеет 3 свойства, которые не наследуются. Из них две (default
и autoDefault
) играют важную роль, когда мы помещаем кнопки на QDialog
s, потому что эти настройки (и фокусировка на одной из кнопок) определяют, какая кнопка будет нажата, если мы нажмем Enter.
По умолчанию все эти свойства установлены false. Только expection autoDefault
, который будет истинным, если кнопка имеет родительский QDialog
.
При каждом нажатии space будет нажата кнопка с фокусом на нем. Ниже описывается, что произойдет, если вы нажмете Enter.
Свойство по умолчанию
Если это значение установлено верно, кнопка будет кнопкой по умолчанию.
Если в диалоговом окне нажать Enter, эта кнопка будет нажата, за исключением случаев, когда фокус находится на кнопке autoDefault.
Должна быть только одна кнопка по умолчанию. Если вы добавите больше, то последняя добавленная будет кнопкой по умолчанию.
Свойство AutoDefault
Если это значение установлено true, кнопка будет кнопкой autoDefault.
Если в диалоговом окне нажать Enter, эта кнопка будет нажата, если фокус включен.
Если фокус не находится на кнопке autoDefault и кнопка по умолчанию отсутствует, то для кнопки Enter будет нажата следующая кнопка autoDefault.
Плоское свойство
Если это значение установлено true, граница кнопки не будет повышена.
Примеры таблиц
В следующих таблицах показано, какая кнопка будет нажата с различными кнопками на разных фокусах. Кнопки добавляются слева направо.
Тестовый код
Следующий код - это способ добавления кнопок в диалог. Его можно использовать для тестирования, изменив значения boolean
на setDefault()
и/или setAutoDefault()
.
Вам просто нужно создать окно, добавить QPushButton
под названием pushButton
и QLabel
, называемый label
(это именование по умолчанию). Не забудьте #include <QMessageBox>
. Затем скопируйте этот код на кнопку clicked()
:
void MainWindow::on_pushButton_clicked()
{
QMessageBox msgBox;
QPushButton button("Button");
button.setDefault(false);
button.setAutoDefault(false);
msgBox.addButton(&button, QMessageBox::ActionRole);
QPushButton autodefaultbutton("AutoDefault Button");
autodefaultbutton.setDefault(false);
autodefaultbutton.setAutoDefault(true);
msgBox.addButton(&autodefaultbutton, QMessageBox::ActionRole);
QPushButton autodefaultbutton2("AutoDefault Button2");
autodefaultbutton2.setDefault(false);
autodefaultbutton2.setAutoDefault(true);
msgBox.addButton(&autodefaultbutton2, QMessageBox::ActionRole);
QPushButton defaultbutton("Default Button");
defaultbutton.setDefault(true);
defaultbutton.setAutoDefault(false);
msgBox.addButton(&defaultbutton, QMessageBox::ActionRole);
msgBox.exec();
if (msgBox.clickedButton() == &button) {
ui->label->setText("Button");
} else if (msgBox.clickedButton() == &defaultbutton) {
ui->label->setText("Default Button");
} else if (msgBox.clickedButton() == &autodefaultbutton) {
ui->label->setText("AutoDefault Button");
} else if (msgBox.clickedButton() == &autodefaultbutton2) {
ui->label->setText("AutoDefault Button2");
}
}
Дисплей
Если вы скомпилируете код, вы можете получить это окно. Вам даже не нужно нажимать на кнопки, потому что способ, которым они отображаются операционной системой, показывает, какой из них будет нажат, если вы нажмете Enter или space.
Официальная документация
Большая часть этого ответа была сделана в соответствии с официальной документацией.
Документация QPushButton, сделанная Qt, гласит следующее:
Кнопки по умолчанию и autodefault определяют, что происходит, когда пользователь нажатие вводит в диалоговом окне.
Кнопка с этим свойством имеет значение true (т.е. диалоговое окно по умолчанию кнопка,) будет автоматически нажата, когда пользователь нажимает кнопку ввода, за одним исключением: если в настоящее время кнопка autoDefault имеет фокус, Нажата кнопка autoDefault. Когда в диалоговом окне есть кнопки autoDefault но кнопка по умолчанию не нажата, нажатие кнопка autoDefault, которая в настоящее время имеет фокус, или если ни одна кнопка не имеет focus, следующая кнопка autoDefault в цепочке фокусировки.
В диалоговом окне по умолчанию может использоваться только одна кнопка. Затем эта кнопка отображается с дополнительным кадром (в зависимости от стиль GUI).
Поведение кнопки по умолчанию предоставляется только в диалогах. Кнопки могут всегда щелкайте с клавиатуры, нажав клавишу "Пробел", когда кнопка имеет фокус.
Если для свойства по умолчанию установлено значение false на текущей кнопке по умолчанию в то время как диалог отображается, новое значение по умолчанию будет автоматически назначается в следующий раз, когда кнопка в диалоговом окне получает фокус.
Также стоит проверить QDialog и QMessageBox.