Создание собственного диалогового окна

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

   
Окна программы, показанные на рис. 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;
    }
};

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



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

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