Читайте также:
|
|
Анализ диаграмм, приведенных на рисунке 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();
}
Несмотря на то, что программа получилась более длинной, с точки зрения технологии она грамотнее построена и, следовательно, в ней проще разбираться, что особенно важно при разработке больших программ.
Дата добавления: 2015-08-09; просмотров: 131 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Создание интерфейса из совокупности объектов библиотечных классов | | | Создание русскоязычного интерфейса в Qt |