Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
15. Создание интерфейсов с использованием Qt.doc
Скачиваний:
96
Добавлен:
18.11.2018
Размер:
3.68 Mб
Скачать
      1. Разработка собственного класса окна приложения

Анализ диаграмм, приведенных на рисунке 1.1, показывает, что практически все управление компонентами окна, кроме их создания, реализуется программой не напрямую, а с использованием управляющего контейнера – окна. Поэтому более логично и создание подчиненных компонентов возложить на виджет окна, для чего необходимо создать специальный класс окна.

Пример 1.2. Приложение Hello. Проектирование Qt интерфейса с использованием специального класса окна.

Класс окна обычно наследуется от одного из классов Qt. В нашем случае, как и в первом примере, наследование будем выполнять от класса QWidget (см. рисунок 1.3).

Рисунок 1.3 – Диаграмма классов приложения Hello

При наследовании управляемые окном виджеты Кнопка и Метка будут включены в проектируемый класс в качестве указателей на объекты соответствующих классов. Отношение между классами компонентов и проектируемым классом – наполнение.

Несколько более сложная ситуация с менеджером компоновки. Объект этого класса работает только в конструкторе класса окна и более нигде не используется. Поэтому целесообразно объявлять и создавать этот объект только в конструкторе проектируемого класса в качестве локальной переменной. Такое решение позволит сократить количество объектных полей класса окна и, соответственно, упростить его описание.

Компоновать приложение будем по схеме, рекомендуемой для программ на С++ (см. рисунок 1.4):

  • файл hello.h будет содержать описание интерфейсного класса окна,

  • файл hello.cpp – реализацию методов этого класса,

  • файл main.cpp – основную программу.

Рисунок 1.4 – Диаграмма компоновки приложения Hello

Файл win.h с описанием класса окна:

#ifndef hello_h

#define hello_h

#include <QtGui>

class Win: public QWidget

{

QLabel *helloLabel;

QPushButton *exitButton;

public:

Win(QWidget *parent = 0);

};

#endif

Примечание. Для предотвращения повторной компиляции этого файла используется стандартный прием: в начале стоит проверка существования переменной win_h препроцессора. Если эта переменная задана, то файл уже был компилирован, если не задана – то переменная определяется, а файл компилируется.

Файл win.cpp содержит описание конструктора класса Win:

#include "hello.h"

Win::Win(QWidget *parent):QWidget(parent)

{

setWindowTitle("Hello");

helloLabel=new QLabel("Hello!",this);

exitButton=new QPushButton("Exit",this);

QHBoxLayout *layout = new QHBoxLayout(this); // создание элемента

// компоновки для управления размещением метки и кнопки в окне win

layout->addWidget(helloLabel); // добавление метки к компоновщику

layout->addWidget(exitButton); // добавление кнопки к компоновщику

// связь сигнала нажатия кнопки и слота закрытия окна

connect(exitButton,SIGNAL(clicked(bool)),

this,SLOT(close()));

}

Файл main.cpp содержит основную программу:

#include "hello.h"

int main(int argc, char *argv[])

{

QApplication app(argc, argv);

Win win(0);

win.show();

return app.exec();

}

Несмотря на то, что программа получилась более длинной, с точки зрения технологии она грамотнее построена и, следовательно, в ней проще разбираться, что особенно важно при разработке больших программ.

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