Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КП - 2 часть - Лекция 3. Знакомство с QT.docx
Скачиваний:
27
Добавлен:
11.05.2015
Размер:
695.85 Кб
Скачать

2.4Htmlтеги

В качестве текста большинство элементов управления позволяет использовать HTMLтеги, в том числе и в диалогах.

Например, выделение жирным:

QMessageBox::information(

this,

"Информация - СуперПриложение",

"Описание <b>ошибки</b>");

3 Окна

3.1 Создание дополнительных окон

Стандартных окон Информация, Ошибка, Вопрос вполне достаточно для простого взаимодействия с пользователем. Однако, к примеру, когда нужно навесить более сложную логику в окно (например, добавить элементы управления) нужно создавать свое окно.

Ниже пример как это можно сделать. Пускай, нам нужна форма, на которой можно ввести количество лет.

Кинем на форму Label,LineEdit. Назовем первый объектm_inputAgeLabel, второй –m_inputAgeTextBox. Поменяем текст уlabel. ПоменяемWindowTitleу формы.

Теперь давайте эту форму вызовем из нашей родительской формы.

Зайдем в mainwindow.cppи подключим заголовочный файл созданной формы.

#include "inputagedialog.h"

void MainWindow::on_m_okPushButton_clicked()

{

InputAgeDialog dialog(this);

dialog.exec();

}

Теперь запустим Сборка \ Запустить QMake(это баг, нужно всегда так делать при добавлении новой формы), а затем Сборка \ Собрать.

Результат:

3.2 Передача данных окнам

Допустим, главная форма хочет передать диалоговому окну какие-то данные: например, выставить количество лет на 18.

Как это обычно делается? Ниже показаны 2 наиболее типичных подхода.

Подход 1. Для всех данных, которые планируется передавать извне, завести по сеттеру в классе формы, т.е. завести публичный метод SetAge(intvalue) вInputAgeDialog.hи его реализацию вInputAgeDialog.cppфайле. Также код по вызову формы видоизменить.

void MainWindow::on_m_okPushButton_clicked()

{

InputAgeDialog dialog(this);

dialog.SetAge(18);

dialog.exec();

}

Подход 2. Завести публичный метод Initialize (int age) в InputAgeDialog. Для всех данных, которые планируется передавать извне, завести по дополнительному аргументу в этом методе.

Код в MainWindow.hбудет выглядеть так:

void MainWindow::on_m_okPushButton_clicked()

{

InputAgeDialog dialog(this);

dialog.Initialize(18);

dialog.exec();

}

Код InputAgeDialog.h

#ifndef INPUTAGEDIALOG_H

#define INPUTAGEDIALOG_H

#include <QDialog>

namespace Ui {

class InputAgeDialog;

}

class InputAgeDialog : public QDialog

{

Q_OBJECT

public:

explicit InputAgeDialog(QWidget *parent = 0);

~InputAgeDialog();

Void Initialize(int age);

private:

Ui::InputAgeDialog *ui;

};

#endif // INPUTAGEDIALOG_H

Код InputAgeDialog.cpp

#include "inputagedialog.h"

#include "ui_inputagedialog.h"

InputAgeDialog::InputAgeDialog(QWidget *parent) :

QDialog(parent),

ui(new Ui::InputAgeDialog)

{

ui->setupUi(this);

}

Void InputAgeDialog::Initialize(int age)

{

ui->m_inputTextLineEdit->setText(QString::number(age));

}

InputAgeDialog::~InputAgeDialog()

{

delete ui;

}

Готово. Можно проверять.

3.3 Получение данных от формы

Подход – добавить публичные геттеры для данных в форму, которые хочет потреблять родительская форма.

Допустим, родительская форма хочет показывать сообщение с количеством лет, которые человек ввел на дочерней форме.

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

InputAgeDialog.h:

#ifndef INPUTAGEDIALOG_H

#define INPUTAGEDIALOG_H

#include <QDialog>

namespace Ui {

class InputAgeDialog;

}

class InputAgeDialog : public QDialog

{

Q_OBJECT

public:

explicit InputAgeDialog(QWidget *parent = 0);

~InputAgeDialog();

void Initialize(int age);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]