|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Создание демонстрационной версии программы, которую можно запустить ограниченное число раз
Цель: создание диалогового приложения для операционной системы Linux, которое может быть запущено ограниченное число раз. Задание: написать программу согласно варианту задания. Число запусков программы должно сохраняться в файле. Варианты. Для создания диалогового приложения с использованием библиотеки Qt необходимо: 1. Создать каталог, название которого будет названием разрабатываемой программы (например ааа). 2. Внутри каталога создать три файла: main.cpp, aaa. cpp, aaa. h. Файл aaa. h является заголовочным файлом, содержащим в себе описание класса для диалогового окна программы. Файл aaa. cpp содержит в себе непосредственное описание класса для диалогового окна программы. Файл main.cpp содержит описание функции main() программы. В нем прописываются действия, которые необходимо выполнить до появления окна, действия по созданию окна и отображения его на экране. 3. Если у разрабатываемой программы будет несколько окон, то классы для каждого окна лучше описать в отдельных файлах название. h и название. cpp (для удобства работы с проектом). 4. Создать проект. Для этого в консоли ввести команду qmake -project (для Qt3) или qmake-qt4 -project (для Qt4). Если никаких ошибок не возникнет, то будет создан файл проекта aaa. pro, в консоль ничего выведено не будет. 5. Ввести в консоли команду qmake aaa.pro (для Qt3) или qmake-qt4 aaa.pro (для Qt4). Если никаких ошибок не возникнет, то в консоль ничего выведено не будет. После этого проект готов к компиляции. 6. Откомпилировать проект. Для этого в консоли ввести команду make Если где-то есть ошибки, то в консоль будут выведены: имя файла, номер строки в нем и описание ошибки. Если ошибок нет, то будет создан исполняемый файл aaa. После исправления ошибок вновь создавать проект уже не нужно, сразу можно компилировать. Пример. Программа вычисляет куб введенного числа. Желаемый вид окна программы показан на рисунке 1.
Рисунок 1 При нажатии на кнопку «Enter» происходит вычисление куба числа, которое записано в поле ввода. Результат выводится в это же поле ввода. Если было введено не число, то программа выводит предупреждающее сообщение. При нажатии на кнопку «Exit» происходит выход из программы. Первоначально нужно создать класс, описывающий окно программы, как наследник от базового класса QWidget или QDialog. В его описании перечислить все виджеты (графические компоненты – кнопки, поля ввода и т.п.), которые будут располагаться в окне, перечислить слоты и сигналы класса. Сигналы – это события, которые может генерировать окно в ответ на какие-то действия или изменение состояния. Слоты – это функции-обработчики событий, которые связываются с сигналами. Объявление класса необходимо разместить в заголовочном файле. Для примера содержимое файла ааа.h показано ниже. //Подключение необходимых библиотек #include <qapplication.h> #include <qwidget.h> #include <qlabel.h> #include <qpushbutton.h> #include <qlayout.h> #include <qlineedit.h> #include <qstring.h> #include <qmessagebox.h>
class aаа:public QWidget //объявление собственного класса-наследника от класса QWidget { Q_OBJECT //обязательно надо для программ, где есть слоты и сигналы private: //элементы на окне программы QLabel *metka;//текстовая метка QLineEdit *ed; //поле для ввода и вывода чисел QPushButton *label1;//кнопка Enter QPushButton *label;//кнопка Exit public: аaа(QWidget *parent=0);//конструктор класса private slots://слот класса void s(); //обработчик нажатия кнопки «Enter» signals://сигналов у класса нет, поэтому тут пусто }; В файле ааа.срр необходимо описать все функции созданного класса, включая и конструктор. В конструкторе описываются действия по созданию окна: выделяется память под все виджеты окна, описывается их внешний вид, расположение относительно окна программы, задаются какие-либо начальные значения переменных (если это нужно в программе) и т.п., связываются между собой сигналы и слоты. Для размещения виджетов в окне используются специальные классы – менеджеры компоновки (своего рода сетки, в которых располагаются виджеты): расположение по горизонтали – QHBoxLayout, расположение по вертикали – QVBoxLayout. Менеджеры компоновки можно вкладывать друг в друга. В рассматриваемом примере используются три менеджера: два горизонтальных и один вертикальный, в котором располагаются оба горизонтальных. Для примера содержимое файла ааа.срр показано ниже. #include "aаа.h" ааa::ааa(QWidget *parent):QWidget(parent) //описание конструктора класса { setCaption("Ne4to");//заголовок на окне QVBoxLayout *l2=new QVBoxLayout(this);//для размещения по вертикали двух созданных групп элементов (l и l1) QHBoxLayout *l=new QHBoxLayout(this);//для размещения по горизонтали элементов metka и ed metka = new QLabel("Vvedite chislo",this);//создание элемента текстовая метка ed = new QLineEdit(this);//создание поля для ввода значения label1 =new QPushButton("Enter", this);//создание кнопки Enter label = new QPushButton("Exit", this);//создание кнопки Exit l->addWidget(metka);//размещение по горизонтали элементов metka и ed l->addWidget(ed); //// QHBoxLayout *l1=new QHBoxLayout(this);//размещение по горизонтали элементов label1 и label l1->addWidget(label1); l1->addWidget(label); //// l2->addLayout(l);//размещение по вертикали двух созданных групп элементов (l и l1) l2->addLayout(l1); //// // установка связей между сигналами и слотами connect(label1,SIGNAL(clicked()),this,SLOT(s()));// на сигнал "нажатие кнопки Enter" вызывается собственный слот-обработчик "s()" connect(label,SIGNAL(clicked()),this,SLOT(close()));//на сигнал "нажатие кнопки Exit" вызывается стандартный слот-обработчик "закрытие окна"
} void ааа::s() //слот-обработчик "s()" { QString ds;//переменная типа строка ds=ed->text();//получение введенного значения из поля ed в строку ds bool ok; int dec = ds.toInt(&ok, 10);//преобразование его в целое число dec if (ok==TRUE) { //если переменная ok равна истине, по преобразование произошло успешно dec=dec*dec*dec;//возведение числа в третью степень ed->setText(QString("%1").arg(dec));//обратное преобразование из числа в строку и запись ее в поле ed } else {//если преобразование из строки в число не произошло (см. на if),то ed->clear();//очищается поле ed QMessageBox::information(this, "ааа", "<b><i>Vvedeno ne chislo!!</i></b>");//появляется окно с предупреждением Vvedeno ne chislo!! // <b>...</b> теги html, просто для красоты } }
В файле main.cpp будет располагаться следующий текст. #include <qapplication.h> // нужно обязательно #include "ааа.h"//подключение библиотеки с окном данной программы int main(int argc, char *argv[]) { QApplication app(argc, argv);//создание приложения ааa *lll=new aаа(0);//создание диалогового окна lll->show();//показать на экране return app.exec(); } Для работы с файлами в QT предусмотрены классы QFile и QDataStream. В приведенном ниже примере показана процедура записи в файл 1.txt. QFile file(“1.txt”); if (!file.open(QIODevice::WriteOnly)) {//действия, если файл не открылся } QDataStream out(&file); //привязка потока вывода к открытому файлу out<<”12345’;//запись в поток
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.) |