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

Создание графических интерфейсов пользователя с использованием Qt 5.12 (1245345), страница 6

Файл №1245345 Создание графических интерфейсов пользователя с использованием Qt 5.12 (Методические пособия по C++ Г.С.Иванова 3 части) 6 страницаСоздание графических интерфейсов пользователя с использованием Qt 5.12 (1245345) страница 62021-07-27СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 6)

Создание образа окна выполняется с использованием Qt Designer. Для его вызова нажимаем слева кнопку Дизайн или дважды щелкаем мышкой пофайлу widget.ui в навигаторе.Внешний вид дизайнера несколько отличается от того, который был рассмотрен вразделе 1.4, однако отличия в основном косметические (см. рисунок 1.19).Рисунок 1.19 – Внешний вид окна дизайнера в среде Qt CreatorПроцесс создания внешнего вида формы ничем от рассмотренного в разделе 1.2.3 неотличается.

Аналогично перетаскиваем с левой панели метку QLabel и кнопку QPushButton, затем настраиваем их параметры (имена label и button, надписи Hello! и Close соответственно). Также устанавливаем необходимые компоновщики.Основное отличие – в переключении режимов: виджеты, действия, сигналы и слотыи табуляция. Режим виджетов и корректировки порядка переключения по Tab доступныпостоянно, переключение между редакторами сигналов и слотов и действий происходитпри выборе закладок внизу в центральной части окна.Для нашего функционирования нашего приложения необходимо добавить один сигнал и реакцию на него (связать сигнал с соответствующим слотом).

Для этого переключаемся на вкладку редактора сигналов и слотов и нажимаем кнопку «+» над окном редактора связей. В окне появляется новая строка:<Отправитель> <Сигнал><Получатель><Слот>.Если дважды щелкать мышкой по этим клеткам, то будут открываться выпадающиесписки возможных вариантов. Выбираем нужные элементы и получаем:button clicked() Widget close().При запуске программы на экране появляется главное окно приложения (см. рисунок1.20), которое работает с соответствии с заданием.Рисунок 1.20 – Вид приложения, созданного в среде Qt Creator1.3 Информационная поддержка библиотеки Qt AssistantРазработка программ с использованием средств Qt существенно облегчается наличием в системе справочной системы по всем средствам, механизмам и классам Qt.

Справочная система существует в виде отдельного приложения Qt Assistant (файл Assistant.exe),которое также интегрировано в среду программирования Qt Creator.При вызове приложения Qt Assistant на экране появляется главное окно справочнойсистемы (см. рисунок 1.21).Рисунок 1.21 – Вид главного окна справочной системы QtСправочная система предоставляет возможность навигации по разделам, по индексному указателю, а также поиск классов и/или методов по именам, по контексту во всехстатьях документации.

Документация предоставляет несколько вариантов группировкиклассов и функций библиотеки, что позволяет быстро найти классы для работы, напримерс сигналами и слотами, с графикой, классы контейнеры и пр.Описание Qt содержит большое количество примеров. Частично документация переведена на русский язык. Русскоязычный вариант справочной системы можно взять на сайте http://doc.crossplatform.ru/qt/ и добавить в справочную систему согласно инструкцииразработчиков.ГЛАВА 2 СРЕДСТВА БИБЛИОТЕКИ QTСредства поддержки библиотеки классов Qt добавляют к C++: возможность описания свойств объектов для работы в Qt Creator; механизм непосредственного взаимодействия объектов, называемый «сигналы ислоты»; события и фильтры событий; контекстный перевод строк для интернационализации; защищенные указатели QPointer, автоматически устанавливаемые в 0 при уничтожении объекта, на который они ссылаются; динамическое приведение (dynamic cast), которое работает через границы библиотек; таймеры, которые делают возможным интеграцию многих задач в графическийинтерфейс пользователя, управляемый событиями.Рассмотрим некоторые из указанных средств более подробно.2.1 Виджеты и их свойстваКак уже упоминалось ранее, все управляющие интерфейсные элементы, такие каккнопки, метки, текстовые редакторы и т.п., в Qt названы виджетами.

Виджеты – объектыинтерфейсных классов, наследуемых от базового интерфейсного класса QWidget. Этоткласс, в свою очередь, наследуется от базового класса большинства классов Qt – классаQObject, обеспечивающего работоспособность главных механизмов Qt.Объектам класса QWidget соответствует графическое представление – прямоугольный фрагмент экрана – окно. Остальные виджеты, как объекты классов, наследуемых отQWidget, также представляют собой соответствующим образом оформленные прямоугольники.QWidget – контейнерный класс, объекты которого – контейнеры или «родители» потерминологии Qt – отвечают, как за отображение управляемых виджетов – «детей», так иза освобождение выделенной последним памяти.Примечание. В теории объектно-ориентированного программирования термины «родитель –ребенок» обычно используют для описания отношения базового и производных классов.

Однакоиспользование в Qt этих терминов для обозначения объектов-контейнеров и управляемых виджетов особой путаницы не вносит, если обращать внимание на то, между какими компонентами фиксируется отношение: если речь идет об отношении классов, то имеется в виду наследование, еслиоб отношении объектов – то отношение «контейнер – управляемый элемент».При создании большинства виджетов используется конструктор базового классаQWidget с двумя параметрами:QWidget(QWidget* parent=0, Qt::WindowFlags=0) {…}Первый параметр – родитель.

С помощью этого параметра строятся иерархии объектов-виджетов. Если в качестве первого параметра указан 0, то родителя у виджета нет.При отсутствии менеджеров компоновки такой виджет отображается в отдельном окнеинтерфейса и сам отвечает за выделение и освобождение памяти.Второй параметр – флаги – битовая комбинация, отвечающая за тип окна: обычное,диалоговое, контекстное меню, панель инструментов, выпадающая подсказка и т.п. В простых приложениях этот параметр обычно берется по умолчанию – обычное окно.Если при создании метки указать объект класса QWidget в качестве родителя:QWidget window(0);// окно – родительский виджетQLabel *label = new QLabel("Label", window); // виджет-ребенокто метка будет создана в рабочей области окна, будет становиться видимой или невидимой вместе с виджетом win и будет уничтожена вместе с ним.Контейнерные свойства класса QWidget наследуют все классы-потомки.

Соответственно любой виджет может служить контейнером для других виджетов.Использование контейнерных свойств виджетов существенно упрощает работу сними, позволяя при создании объединять виджеты формы в динамическую древовиднуюструктуру требуемой конфигурации.Корневой виджет формы объявляют без родителя. Он соответствует окну приложения. Для корректного выделения/освобождения памяти виджетов-детей при создании/уничтожении корневого виджета, подчиненные виджеты-компоненты размещают вдинамической памяти. Выделение памяти под них обычно осуществляют в конструкторекласса контейнера, а освобождение – прописано в деструкторе класса QWidget.В качестве корневых виджетов для интерфейсных элементов обычно используютсяобъекты классов QWidget, QDialog и QMainWidget.

Объекты класса QWidget применяютдля создания простых форм, объекты класса QDialog – для конструирования диалоговыхокон, а объекты класса QMainWidget – для построения сравнительно сложных окон приложений, включающих строку меню и панели инструментов.Каждый виджет может настраиваться в среде Qt Creator или вручную посредствомизменения его свойств. С помощью свойств можно указать размеры виджетов, их расположение, особенности внешнего вида и др.

Так же, как в Delphi, свойства виджетов в QtCreator доступны через окно Инспектора объектов, но их можно изменять и во время работы программы.В качестве примера рассмотрим следующие свойства: bool visible – видимость виджета и, соответственно, всех его подчиненныхвиджетов; проверка свойства реализуется функцией bool isVisible(); а изменение –процедурой void setVisible(bool visible); bool enabled – способность принимать и обрабатывать сообщения от клавиатуры и мыши: true – способно, false – нет; проверка свойства реализуется функциейbool isEnabled(); а изменение – процедурой void setEnabled(bool enabled); Qt::WindowModality windowModality – тип окна: Qt::nonModal(обычное), Qt::WindowModal (модальное); проверка свойства реализуется функциейQt::WindowModality windowModality (); а изменение – процедурой voidsetWindowModality ( Qt::WindowModality windowModality); QRect geometry – размеры и положение виджета относительно родительскогоокна; размеры задаются прямоугольником типа QRect с фиксированным верхним левымуглом (свойства X,Y), а также шириной и высотой (свойства width,height); при изменении размера формы размеры виджетов могут регулироваться компоновщиком в интервале от заданных минимального minimumSize() до максимального maximumSize();получение значения осуществляют с помощью функции QRect& geometry(), изменение значений процедурами void set Geometry(int x,int y,int w, int h)или void set Geometry(QRect&); QFont font – шрифт, которым выполняются надписи в окне; QString objectName – имя объекта (переменной) в программе, устанавливается процедурой void setObjectName(), читается функцией objectName() и используется для задания имени переменной в Qt Creator и при отладке программ.Всего для объектов класса QWidget определено более 50 свойств и методов (таблица2.1).Таблица 2.1 – Классификация свойств и методов класса QWidgetГруппаСвойства и основные методыОбщиеметодыshow()– показать, hide()– скрыть, raise() – сделать первым в контейнере,lower()– сделать последним в контейнере, close()– закрыть.УправлениеокнамиwindowModified – признак изменения окна, windowTitle – заголовококна, windowIcon – пиктограмма окна, windowIconText, isActiveWindow – признак активности окна, activateWindow()– активизацияокна, minimized – признак свернутого состояния,showMinimized()– свертывание окна, maximized – признак развернутого состояния, showMaximized()– развертывание окна, fullScreen,showFullScreen(), showNormal().Управлениесодержимымupdate()- обновить, repaint()- перерисовать, scroll() – изменить размер рабочей области.Управлениеположениеми размерамивиджета(геометрия)pos – положение левой верхней точки, x(), y(), rect – положениелевой верхней точки и размеры виджета, size, width(), height(),move()– перемещение виджета, resize()– изменение размеров виджета,sizePolicy,sizeHint(), minimumSizeHint(),updateGeometry(), layout(), frameGeometry, geometry,childrenRect, childrenRegion, adjustSize(),mapFromGlobal(),mapToGlobal(), mapFromParent(),mapToParent(),maximumSize, minimumSize, sizeIncrement, baseSize, setFixedSize().Типvisible, isVisibleTo(), enabled, isEnabledTo(),modal, isWindow(),mouseTracking, updatesEnabled,visibleRegion().Внешний видstyle(), setStyle(), styleSheet, cursor, font,palette, backgroundRole(), setBackgroundRole(),fontInfo(), fontMetrics().Взаимодействие с клавиатуройfocus, focusPolicy, setFocus(), clearFocus(),setTabOrder(), setFocusProxy(), focusNextChild(),focusPreviousChild().Захват мышии клавиатурыgrabMouse(), releaseMouse(), grabKeyboard(),releaseKeyboard(), mouseGrabber(), keyboardGrabber().Обработчикисобытийevent(), mousePressEvent(), mouseReleaseEvent(),mouseDoubleClickEvent(), mouseMoveEvent(),keyPressEvent(), keyReleaseEvent(), focusInEvent(),focusOutEvent(), wheelEvent(), enterEvent(),leaveEvent(), paintEvent(),moveEvent(),resizeEvent(), closeEvent(), dragEnterEvent(),dragMoveEvent(), dragLeaveEvent(), dropEvent(),childEvent(), showEvent(), hideEvent(),customEvent(), changeEvent().УправлениеконтейнеромparentWidget(), window(), setParent(), winId(),find(), metric().ПомощьsetToolTip(), setWhatsThis().Пример 2.1.

Управление размером окна посредством изменения геометрическихсвойств корневого виджета.#include <QApplication>#include <QWidget>int main(int argc, char *argv[]){QApplication app(argc, argv); // создаем объект-приложениеQWidget window;// создаем корневой виджетQRect rect=window.geometry(); // читаем размер окна по умолчаниюwindow.setGeometry(20,20,100,100); // устанавливаем размер окнаwindow.resize(300,100);// меняем ширину и высоту окнаwindow.setWindowTitle("Main Window");// устанавливаем заголовокwindow.setObjectName("window");// сохраняем имя объектаwindow.show();// визуализируем окноreturn app.exec();// запускаем цикл обработки сообщений}2.2 Управление расположением виджетов в окнеПри создании окна приложения на базе любого из перечисленных выше классовокон возникает проблема управления расположением окон виджетов в окне приложения.Qt предусматривает два способа решения этой проблемы: задание координат каждого виджета вручную, например посредством методаsetGeometry(); использование специальных невидимых пользователю менеджеров компоновки.В первом варианте при изменении размеров окна приложения пересчет геометрических параметров виджетов должен выполняться в программе.Пример 2.2.

Характеристики

Тип файла
PDF-файл
Размер
6,43 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

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