Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Создание графических интерфейсов пользователя с использованием Qt 5.12

Создание графических интерфейсов пользователя с использованием Qt 5.12 (Методические пособия по C++ Г.С.Иванова 3 части), страница 2

PDF-файл Создание графических интерфейсов пользователя с использованием Qt 5.12 (Методические пособия по C++ Г.С.Иванова 3 части), страница 2 Объектно-ориентированное программирование (ООП) (108456): Книга - 2 семестрСоздание графических интерфейсов пользователя с использованием Qt 5.12 (Методические пособия по C++ Г.С.Иванова 3 части) - PDF, страница 2 (108456) - 2021-07-27СтудИзба

Описание файла

PDF-файл из архива "Методические пособия по C++ Г.С.Иванова 3 части", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 2 страницы из PDF

Объекты этогокласса отвечают за создание и инициализацию главного окна, а также за запуск цикла обработки сообщений от операционной системы.В качестве окна приложения будем использовать объект класса QWidget. КлассQWidget – базовый класс всех виджетов. Его объекты обладают свойствами контейнера,который управляет виджетами визуальных компонентов: метками, кнопками и др., размещенными в окне.Кроме этого нам понадобится объект класса QLabel – метка – виджет, с помощьюкоторого высвечивается текст приветствия, и объект класса QPushButton – кнопка – виджет, который используется для закрытия приложения.Текст программы выглядит следующим образом:#include#include#include#include<QApplication><QLabel><QPushbutton.h><QHBoxLayout>int main(int argc,char *argv[]){QApplication app(argc,argv);QWidget win;win.setWindowTitle("Hello");// создание объекта-приложения// создание объекта управления окном// изменение заголовка окнаQLabel *helloLabel=new QLabel("Hello!",&win); // создание меткиQPushButton *exitButton=new QPushButton("Close",&win);// создание кнопкиQHBoxLayout *layout = new QHBoxLayout(&win); // создание// менеджера компоновки для управления размещением метки и кнопки в окне winlayout->addWidget(helloLabel); // добавление метки к компоновщикуlayout->addWidget(exitButton); // добавление кнопки к компоновщику// связь сигнала нажатия кнопки с закрытием окна winQObject::connect(exitButton,SIGNAL(clicked(bool)),&win,SLOT(close()));win.show();// визуализация окна winapp.exec();// запуск цикла обработки сообщений приложения}Помимо уже указанных объектов окна, метки и кнопки приложение включает такжеобъект класса QHBoxLayout – горизонтальный менеджер компоновки, отвечающий заразмещение и масштабирование подчиненных виджетов: метки и кнопки в окне приложения.

Этот объект срезу при создании связывается с оконным объектом win:QVBoxLayout *layout = new QVBoxLayout(&win);А затем ему передается управление размерами и размещением метки и кнопки:layout->addWidget(helloLabel);layout->addWidget(exitButton);Особого внимания заслуживает оператор (макрос) Qt connect, который связываетсигнал нажатия кнопки exitButton – clicked(bool) с его обработчиком:QObject::connect(exitButton,SIGNAL(clicked(bool)),&win,SLOT(close()));Таким обработчиком – слотом окна win – является метод закрытия окна win –close().

По правилам оконных приложений этот метод обеспечивает не только закрытие окна, но и завершение приложения, если закрываемое окно – последнее.Все объекты создаются в основной программе (рисунок 1.2, а), но при этом виджетокна назначается контейнером для всех остальных и управляет видимостью виджетов ипамятью всех объектов Qt. Поэтому для визуализации окна с меткой и кнопкой достаточно вызвать метод Show() окна win, который обеспечит визуализацию, как самого окна,так и управляемых им виджетов (рисунок 1.2, б).ВизуализироватьСоздатьПрограммаПрограммаwinwinСоздатьlayoutСоздатьlayoutВизуализироватьСоздатьhelloLabelВизуализироватьexitButtonhelloLabelаexitButtonбОсвободитьПрограммаПрограммаwinwinИзменитьразмерыОсвободитьlayoutИзменитьразмерыlayoutИзменитьразмерыhelloLabelвexitButtonОсвободитьhelloLabelОсвободитьexitButtonгРисунок 1.2 – Управление объектами Qt в процессе работы программы:а – создание виджетов основной программой, б – управление видимостью виджетов через контейнер окна;в – управление изменением размеров виджетов посредством менеджера компоновки; г – освобождение памяти через контейнер окна ()После визуализации окна выполняется метод app.exec(), который запускаетсяцикл обработки сообщений, организуя работу приложения.Менеджер компоновки окна, как и само окно, является контейнером, но только длявключенных в него виджетов метки и кнопки.

Он управляет изменением размеров подчиненных виджетов при изменении размеров окна (рисунок 1.2, в).После завершения программы для освобождения всей динамически распределеннойпамяти достаточно посредством оператора delete запросить освобождение памяти окнаwin. Деструктор этого объекта-контейнера автоматически освободит все управляемые имвиджеты (рисунок 1.2, г) и прочие компоненты.1.1.2 Разработка собственного класса окна приложенияАнализ диаграмм, приведенных на рисунке 1.1, показывает, что практически всеуправление компонентами окна, кроме их создания, реализуется программой не напрямую, а с использованием управляющего контейнера – объекта окна. Поэтому более логично и создание подчиненных компонентов возложить на виджет окна, для чего необходимо создать специальный класс окна.Пример 1.2.

Приложение Hello. Проектирование Qt интерфейса с использованиемспециального класса окна.Класс окна обычно наследуется от одного из классов Qt. В нашем случае, как и впервом примере, наследование будем выполнять от класса QWidget (рисунок 1.3).QWidgetWinQLabelhelloLabelexitButtonQPushButtonWin()Рисунок 1.3 – Диаграмма классов приложения HelloПри наследовании управляемые окном виджеты Кнопка и Метка будут включены впроектируемый класс в качестве указателей на объекты соответствующих классов. Отношение между классами компонентов и проектируемым классом – наполнение.Несколько более сложная ситуация с менеджером компоновки. Объект этого классаработает только в конструкторе класса окна и более нигде не используется. Поэтому целесообразно объявлять и создавать этот объект только в конструкторе проектируемогокласса в качестве локальной переменной. Такое решение позволит сократить количествообъектных полей класса окна и, соответственно, упростить его описание.Компоновать приложение будем по схеме, рекомендуемой для программ на языкеС++ (рисунок 1.4): файл hello.h будет содержать описание интерфейсного класса окна, файл hello.cpp – реализацию методов этого класса, файл main.cpp – основную программу.main.cppЗависитhello.hРеализуетhello.cppРисунок 1.4 – Диаграмма компоновки приложения HelloФайл win.h с описанием класса окна:#ifndef hello_h#define hello_h#include <QLabel>#include <QPushButton>class Win: public QWidget{QLabel *helloLabel;QPushButton *exitButton;public:Win(QWidget *parent = 0);};#endifПримечание.

Для предотвращения повторной компиляции этого файла используетсястандартный прием: в начале стоит проверка существования переменной win_h препроцессора.Если эта переменная задана, то файл уже был компилирован, если не задана – то переменнаяопределяется, а файл компилируется.Файл win.cpp содержит описание конструктора класса Win:#include "hello.h"#include <QHBoxLayout>Win::Win(QWidget *parent):QWidget(parent){setWindowTitle("Hello");helloLabel=new QLabel("Hello!",this);exitButton=new QPushButton("Exit",this);QHBoxLayout *layout = new QHBoxLayout(this); // создание элемента// компоновки для управления размещением метки и кнопки в окне winlayout->addWidget(helloLabel); // добавление метки к компоновщикуlayout->addWidget(exitButton); // добавление кнопки к компоновщику// связь сигнала нажатия кнопки и слота закрытия окнаconnect(exitButton,SIGNAL(clicked(bool)),this,SLOT(close()));}Файл main.cpp содержит основную программу:#include "hello.h"#include <QApplication>int main(int argc, char *argv[]){QApplication app(argc, argv);Win win(0);win.show();return app.exec();}Несмотря на то, что программа получилась более длинной, с точки зрениятехнологии она грамотнее построена и, следовательно, в ней проще разбираться, чтоособенно важно при разработке больших программ.1.1.3 Создание русскоязычного интерфейса в QtПроблема неправильного отображения русских букв в интерфейсах программ наязыке С++ связана с тем, что при вводе программы выводимые строки представлены в кодировке Windows-1251 (стандартная 8-битная кодировка русских версий Windows), а наэкране при запуске программ в операционной системе Windows – в кодировке Unicode.В кодировке Unicode все символы кодируются не 8-ми, а 16-ти битными кодами, чторасширяет таблицу кодов более чем до 65 тыс.

комбинаций и обеспечивает не только кодировку английских букв, но и символов национальных алфавитов, в том числе русского.Преобразование в Unicode при запуске программы выполняется автоматически, израсчета, что исходный текст представлен в кодировке Windows-1252 (базовый западноевропейский вариант 8-ми битной кодировки). Таким образом, для символов английскогоалфавита, коды которых в обеих таблицах совпадают, преобразование проходит нормально, а для символов русского – с искажением.Согласно концепции Qt все надписи формы хранятся сразу в кодировке Unicode ввиде строк – объектов класса QString, поэтому с отображением этих надписей на экранепроблем не возникает.

Но преобразование выводимых строк в Unicode при их описанииследует выполнить программно.Для работы с разными, в том числе национальными кодировками в Qt определеносемейство классов, одним из которых является класс QTextCodec. Объекты этого классаобеспечивают необходимые перекодировки и в том числе преобразование строк в Unicodeв соответствии с используемой таблицей кодов. Таблица кодов русского языка 1251 можетбыть установлена при создании объекта класса QTextCodec:QTextCodec *codec = QTextCodec::codecForName("Windows-1251");Процесс перекодировки в Unicode осуществляется посредством метода:QString QTextCodec::toUnicode(char *str);например:helloLabel = new QLabel(codec->toUnicode("Привет!"),this);Пример 1.3. Приложение Hello.

Создание русскоязычного интерфейса.Создание интерфейса на русском языке по сравнению с программой примера 1.2 потребует незначительного изменения только файлов описания и реализации окна. Файлпрограммы main.cpp при этом останется без изменения.Файл win.h:#ifndef win_h#define win_h#include <QTextCodec>#include <QLabel>#include <QPushButton>class Win:public QWidget{private:QTextCodec *codec; // перекодировщикQLabel *helloLabel;QPushButton *exitButton;public:Win(QWidget *parent = 0);};#endifФайл win.cpp:#include "win.h"#include <QHBoxLayout>Win::Win(QWidget *parent):QWidget(parent){codec = QTextCodec::codecForName("Windows-1251");setWindowTitle(codec->toUnicode("Приветствие"));helloLabel = new QLabel(codec->toUnicode("Привет!"),this);exitButton =new QPushButton(codec->toUnicode("Выход"),this);QHBoxLayout *layout = new QHBoxLayout(this);layout->addWidget(helloLabel);layout->addWidget(exitButton);connect(exitButton,SIGNAL(clicked(bool)),this,SLOT(close()));}После запуска программы получаем на экране окно с текстом на русском языке(рисунок 1.5).Рисунок 1.5 – Интерфейс на русском языкеПримечание.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5209
Авторов
на СтудИзбе
430
Средний доход
с одного платного файла
Обучение Подробнее