Проектирование диалоговых окон в Qt Designer. Класс QDialogButtonBox

   
На этом шаге рассмотрим использование класса QDialogButtonBox.

   
На практике нам следовало бы использовать QDialogButtonBox,
виджет, содержащий указанные нами кнопки и представляющий их правильно
в той системе отображения окон, в которой было запущено приложение. Чтобы диалоговое окно использовало QDialogButtonBox, мы должны изменить
как дизайн, так и код. В Qt Designer нужно выполнить всего четыре действия:

  • щелкните мышью по форме (но не по виджетам и не по менеджерам компоновки), а затем выберите пункт меню Form / Break Layout (Форма / Удалить компоновщик);
  • щелкайте и удаляйте кнопки ОК и Cancel, горизонтальный разделитель и горизонтальную компоновку (теперь пустую);
  • перетащите элемент Button Box на форму, под меткой Расположение ячейки и строкой редактирования;
  • щелкните по форме, а затем выберите пункт меню Form / Lay Out Vertically (Форма / Скомпоновать по вертикали).

   
Если бы мы внесли изменения только в дизайн формы, например изменили
бы компоновку диалогового окна и свойства виджетов, мы могли бы просто заново построить приложение. Однако здесь мы удалили несколько виджетов и добавили новый виджет, и в этом случае мы должны внести изменения также и в код.

   
Изменения нужно внести в файл gotocelldialog.срр. Вот новая версия конструктора:

GoToCellDialog::GoToCellDialog(QWidget *parent)
: QDialog(parent)
{
   setupUi(this);
   buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
   QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
   lineEdit->setValidator(new QRegExpValidator(regExp, this));
   connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
   connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
}

   
В предыдущей версии мы исходно отключили кнопку ОК в Qt Designer. В QDialogButtonBox мы не можем этого сделать, так что мы сделаем это в коде, сразу после вызова функции setupUi(). Класс QDialogButtonBox содержит перечислимый тип со стандартными кнопками, и мы можем использовать его для доступа к конкретным кнопкам, в данном случае к кнопке ОК.

   
Очень удобно, что по умолчанию в Qt Designer именем, объекта QDialogButtonBox будет buttonBox. Оба соединения устанавливаются с полями кнопок, а не с самими кнопками. Сигнал accepted() генерируется при нажатии кнопки с опцией AcceptRole, и, аналогично, сигнал rejected() генерируется при нажатии кнопки
с опцией RejectRole. По умолчанию стандартная кнопка QDialogButtonBox::0k имеет опцию AcceptRole, а кнопка QDialogButtonBox::Cancel - опцию RejectRole.

   
Необходимо внести еще только одно изменение - в слоте on_lineEdit_textChanged():

void GoToCellDialog::on_lineEdit_textChanged()
{
   buttonBox->button(QDialogButtonBox::Ok)->setEnabled(
                        lineEdit->hasAcceptableInput());
}

   
Файлы приложения можно взять Предыдущий шаг
Содержание
Следующий шаг



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий