Шаг 134.
Библиотека Qt.
Создание собственного диалогового окна

    На этом шаге рассмотрим создание собственного диалогового окна.

    Окна программы, показанные на рис. 1, иллюстрируют создание собственного диалогового окна. При запуске программы на экране появляется окно с кнопкой "Нажми меня", нажатие на которую отображает диалоговое окно ввода имени и фамилии.


Рис.1. Собственное диалоговое окно

    Рассмотрим класс для создания собственного диалогового окна.

//Для создания собственного диалогового окна нужно унаследовать класс QDialog
class InputDialog : public QDialog {
    Q_OBJECT
private:
//Класс InputDialog содержит два атрибута — указатели m_ptxtFirstName и 
//m_ptxtLastName на виджеты однострочных текстовых полей
    QLineEdit* m_ptxtFirstName;
    QLineEdit* m_ptxtLastName;
public:
    InputDialog(QWidget* pwgt = 0);
//и два метода, возвращающие содержимое этих полей: firstName() и lastName()
    QString firstName() const;
    QString lastName () const;
};

    Рассмотрим часть текста конструктора класса InputDialog.

InputDialog::InputDialog(QWidget* pwgt/*= 0*/)
     : QDialog(pwgt)
{
    ....
    QPushButton* pcmdOk     = new QPushButton("&Применить");
    QPushButton* pcmdCancel = new QPushButton("&Отменить");
    //Сигналы clicked() кнопок Применить и Отменить
    //соединяются со слотами accept() и rejected() соответственно.
    //Это делается для того, чтобы метод exec() возвращал
    //при нажатии кнопки Применить значение QDialog::Accepted,
    //а при нажатии на кнопку Отменить — значение QDialog::Rejected
    connect(pcmdOk, SIGNAL(clicked()), SLOT(accept()));
    connect(pcmdCancel, SIGNAL(clicked()), SLOT(reject()));
    ....
}

    Метод firstName() возвращает введенное пользователем имя, а метод lastName() - фамилию.

QString InputDialog::firstName() const
{
    return m_ptxtFirstName->text();
}
QString InputDialog::lastName() const
{
    return m_ptxtLastName->text();
}

    Рассмотрим текст заголовочного файла StartDialog.h:

//Класс StartDialog унаследован от класса кнопки QPushButton
class StartDialog : public QPushButton {
Q_OBJECT
public:

    StartDialog(QWidget* pwgt = 0) : QPushButton("Нажми меня", pwgt)
    {
//Сигнал clicked() методом connect() соединяется со слотом slotButtonClicked()
        connect(this, SIGNAL(clicked()), SLOT(slotButtonClicked()));
    }
public slots:
//В слоте создается объект диалогового окна InputDialog, который не имеет предка.
//Диалоговые окна, не имеющее предка, 
//будут центрироваться на экране. 
//Окна с предками будут отцентрированы относительно предка
    void slotButtonClicked()
    {
        InputDialog* pInputDialog = new InputDialog;
        //В условии оператора if выполняется запуск диалогового окна.
        //После же его закрытия управление передается основной программе
        //и метод exec() возвращает значение нажатой пользователем кнопки
        if (pInputDialog->exec() == QDialog::Accepted) {
            //В том случае, если пользователем была нажата кнопка Ok,
            //будет отображено информационное окно с введенными
            //в диалоговом окне данными
            QMessageBox::information(0,"Приветствие",
                                     "Здравствуйте, "
                                     + pInputDialog->firstName()
                                     + " "
                                     + pInputDialog->lastName()
                                    );
        }
        //По завершении метода диалоговое окно нужно удалить,
        //т. к. у него нет предка, который позаботится об этом
       delete pInputDialog;
    }
};

    Файлы приложения можно взять здесь.

    На следующем шаге рассмотрим cтандартные диалоговые окна, а именно диалоговое окно выбора файлов.




Предыдущий шаг Содержание Следующий шаг