Реклама

Поиск

Qt/C++ - Урок 045. SvgReader на Qt. Восстановление данных из файла SVG в QGraphicsScene

TutorialQtQGraphicsScene, Qt, SVG, Svg Reader199

В прошлой статье был рассмотрен пример того, как сохранить объекты графической сцены в файл SVG, а потом мы смогли открыть его в CorelDraw. А теперь попробуем этот же самый файл открыть и восстановить графические объекты в QGraphicsScene .

Отмечу, что мы не будем использовать класс QSvgRenderer для этого по той причине, что он без проблем поместит содержимое файла SVG на графическую сцену, НО это будет один единый графический объект, а если Вам нужно, чтобы он восстановился в качестве отдельных графических объектов, например, QGraphicsItem , то необходимо будет парсить файл SVG изготавливать из него все графические объекты.

Поскольку файл SVG имеет структуру XML-формата, то разобрать его не представит никакого труда с помощью классов семейства QDomDocument.

Qt/C++ - Урок 044. Сохранение объектов QGraphicsScene в файл векторной графики SVG

TutorialQtCorelDraw, QGraphicsScene, Qt, SVG206

С помощью библиотеки Qt можно сохранять содержимое графической сцены QGraphicsScene в файлы векторной графики формата SVG, которые после без проблем открываются в таких редакторах, как CorelDraw. Предлагаю написать небольшое приложение, которое позволит сохранить содержимое графической сцены в файл формата SVG, а потом откроем его с помощью CorelDraw .

Структура проекта

  • SvgExample.pro - профайла проекта;
  • mainwindow.h - заголовочного файла главного окна приложения;
  • mainwindow.cpp - файла исходных кодов главного окна приложения, в котором и будет происходить всё действо;
  • mainwindow.ui - файл формы главного окна приложения;
  • main.cpp - основного стартового файла исходных кодов.

Реклама

GameDev на Qt - Урок 2. Пишем класс Bullet для стрельбы в Qt

TutorialQtGameDev, bullet, Qt, пуля255

После того, как Мы начали управлять своим героем, и его взгляд всегда обращён в сторону цели, настало время написать класс Bullet, который будет отвечать за пули и их полёт по игровой сцене. Механика перемещения пули по графической сцене будет аналогична механике перемещения главного героя. Различие будет в том, что пуля всегда движется по прямой и разворот пули нужно будет установить только в момент создания объекта класса Bullet, чтобы задать направления полёта пули.

Структура проекта с классом Bullet

Структура проекта из предыдущего урока изменяется в том плане, что добавляется новый класс Bullet. Также потребуется доработать все остальные классы для обеспечения взаимодействия с новым классом.

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

Qt/C++ - Урок 026. Применение CallBack функции

TutorialQtcallback c++, callback, callback функция, Qt callback, Qt урок333

Для передачи данных в Qt используется система сигналов и слотов, но это не означает, что нельзя применить старый проверенный способ, а именно использование CallBack функций. Дело в том, что использование CallBack функции является несколько более быстродействующим вариантом, чем сигналы и слоты. А также может быть более легким в применении, что касается того, что сигналы желательно отсоединять от слотов, когда объект посылающий сигнал уничтожается в программе и больше не используется. Этот момент особенно актуален, если учитывать то, что в C++ отсутствует сборщик мусора, как в Java или C# .

Принцип работы CallBack функции

Принцип работы CallBack функции

Для использования CallBack функций в классе, который должен будет возвращать результат, необходимо объявить указатель на функцию с такой же сигнатурой, как и у функции, которая будет использована в качестве CallBack функции. А для установки указателя на функцию необходимо использовать метод класса для установки этого указателя. То есть в этот метод передаётся указатель на функцию, который устанавливается в CallBack указатель класса, который будет возвращать результат своей деятельности. При этом в данном классе этот указатель используется как обычная функция, которая будет совершать заданные действия в классе, из которого эта функция была установлена в качестве CallBack функции в текущем классе.

Для примера будет использован класс, который отрисовывает квадрат на графической сцене и управляется клавишами W, A, S, D. При движении квадрат должен отсылать данные о своих координатах в класс, в котором был создан. То есть должен вызывать функцию данного класса в качестве своей CallBack функции.

GameDev на Qt - Урок 4. Обнаружение коллизий в Qt (2D)

TutorialQtGameDev, Qt, Collision, Коллизия309

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

Реклама

Как написать игру на Qt - Урок 5. Добавляем звук с QMediaPlayer

TutorialQtGameDev, QMediaPlayer, QMediaPlaylist, Qt звук, Qt, написать игру210

Приступаем к пятому и заключительному уроку по написанию игры на Qt, в котором добавим звук с помощью класса QMediaPlayer. Предлагаю добавить три вида звуков: Поедание яблок, жужжание Мухи, которая будет жужжать при передвижении и душераздирающий вопль, когда Муху съедят.

Звук в структуре проекта

Звук в структуре проекта помещается в файл ресурсов, как показано на скриншоте структуры проекта.

Для этого создаём папку resource и в ней папку game. Далее в папке resources создаём файл ресурсов, в котором прописываем префикс "/" и добавляем аудио файлы, которые предварительно поместили в папку game.

А далее звуки необходимо подключить к проекту с использованием класса QMediaPlayer.

В данном случае звуки подключаются в трёх местах программного кода.

Qt/C++ - Урок 028. Как использовать sprite картинки с помощью QPixmap

TutorialQtQPixmap, Qt sprite, Qt, sprite, sprite QPixmap271

После того, как мы нарисовали sprite в прошлом уроке по работе с Adobe Illustrator, настало время применить полученную картинку при работе с Qt и добавить её в программу с помощью QPixmap. Причем, мы сделаем анимированый sprite, и посмотрим, как происходит маленький анимированый взрыв на графической сцене нашего приложения на Qt.

Структура проекта для работы с QPixmap и sprite

Структура проекта sprite_example будет следующая:

  • sprite_example.pro - профайл проект;
  • widget.h - заголовочный файл основного окна приложения;
  • widget.cpp - файл исходных кодов основного окна приложения;
  • widget.ui - файл интерфейса;
  • sprite.h - заголовочный файл класса, предназначенного для нашего спрайта, в котором будет применяться QPixmap;
  • sprite.cpp - файл исходных кодов для работы с QPixmap;
  • sprite.qrc - ресурсный файл;
  • sprite_sheet.png - наш спрайт, который мы применим для анимации.

Qt/C++ - Урок 033. Работаем с QGraphicsObject вместо QGraphicsItem

TutorialQtGameDev, QGraphicsItem, QGraphicsObject, QGraphicsScene, Qt318

Моё внимание обратили на то, что для работы с сигналами и слотами вместо класса наследованного от QGraphicsItem и от QObject можно использовать класс наследованный от QGraphicsObject . И действительно, если немного покопаться в исходниках QGraphicsObject , то обнаружится, что это класс наследованный от QGraphicsItem и от QObject . То есть также применяется множественное наследование, только в данном случае все велосипеды уже написаны до нас. Поэтому попробуем поработать с данным классом на примере игровой механики.

А именно, предлагаю написать программу, в которой Мы будет перемещать героя кликом мыши по графической сцене, как в любой РПГ наподобие Diablo.

Структура проекта для работы с QGraphicsObject

  • QGraphicsObjectExample.pro - профайл проекта;
  • main.cpp - основной файл исходных кодов;
  • widget.h - заголовочный файл окна приложения;
  • widget.cpp - файл исходных кодов окна приложения;
  • customscene.h - заголовочный файл кастомизированной графической сцены ;
  • customscene.cpp - файл исходных кодов кастомизированной графической сцены;
  • triangle.h - заголовочный файл класса героя-треугольника, который будет передвигаться;
  • triangle.cpp - файл исходных кодов класса героя-треугольника.

Qt/C++ - Урок 018. QGraphicsItem - наследование и СЛОТы

TutorialQtQGraphicsItem, QGraphicsItem example, QGraphicsItem Qt, QGraphicsItem слот, Qt, множественное наследование395

А теперь поговорим немного о наследовании от QGraphicsItem и применении системы СИГНАЛ ов и СЛОТ ов при взаимодействии с графическими объектами на графической сцене QGraphicsScene. В задачу данного урока входит создание приложения, в котором на графической сцене будет отображаться объект класса QGraphicsItem , по нажатию на который будет появляться диалоговое окно QMessageBox , сигнализирующее о событии нажатия на графический объект.

Программный код был написан в QtCreator 3.3.1 на основе Qt 5.4.1.

Структура проекта для работы с QGraphicsItem

В структура данного проекта входят:

  • TestPoint.pro - профайл проекта;
  • mainwindow.h - заголовочный файл основного окна приложения;
  • mainwindow.cpp - файл исходных кодов основного окна приложения;
  • mypoint.h - заголовочный код класса, отнаследованного от QGraphicsItem;
  • mypoint.cpp - соответственно исходный код;
  • main.cpp - основной файл, с которого стартует приложение, в уроке не рассматривается, поскольку создаётся по умолчанию;
  • mainwindow.ui - файл дизайна главного окна.

Qt/C++ - Урок 017. QGraphicsScene или как работать с графикой в Qt

TutorialQtQGraphicsScene, QGraphicsScene example, QGraphicsScene Qt5, QGraphicsScene пример, Qt964

Начиная с этой статьи Мы приступаем к изучению графических библиотек Qt, а если быть точнее, QGraphicsScene. Данный класс предоставляет функционал по управлению большим количеством 2D объектов. QGraphicsScene устанавливается в QGraphicsView.

Опишем функционал, который необходимо будет реализовать в нашем приложении:

  • Добавление графической сцены в QGraphicsView.
  • Отрисовка двух объектов на графической сцене с помощью линий, а именно прямоугольника и квадрата.
  • Динамическое изменение размеров графической сцены в зависимости от изменения размеров QGraphicsView.
  • Динамическое изменение объектов на графической сцене в зависимости от размеров самой графической сцены.

Программный код был написан в QtCreator 3.3.1 на основе Qt 5.4.1.

Структура проекта для работы с QGraphicsScene

Структура проекта для работы с QGraphicsScene

К структуре проекта "по умолчанию" добавляется ещё один класс MyGraphicView.

Дело в том, что для удобства работы с QGraphicsScene было принято решение создать класс, который наследуется от QGraphicsView и уже внутри него работать с графической сценой и её объектами.

Реклама

Реклама