Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
12 октября 2015 г. 15:15

QML

Android, qml, qml button, qml button android, qml custom button, qml custom button android, qt, qt qml

Начну серию уроков по QML Android с кастомизации кнопки, или правильнее сказать со стилизации , поскольку в данном случае такой термин подходит больше. Мы не будем вызывать диалоговые окна в данном уроке, а просто сделаем свой QML Cutom Button , который будет менять цвет при нажатии на него. А для наглядности таких кнопок будет две.

Первая кнопка будет красного цвета с черным ободком и чёрным текстом, а при нажатии она будет менять цвет фона на черный с красным ободком и красным цветом. А вторая кнопка будет иметь те же цвета, но в противоположной последовательности.

Структура проекта QML Custom Button

Проект создаётся в QtCreator как проект приложения Qt Quick с элементами Quick Controls. Фактически там уже будет менюбар, несколько диалогов и пара кнопок. Так вот, выкидываем всё, кроме двух кнопок и поехали их кастомизировать.

А структура проекта в данном случае получится следующая:

  • QMLCutomButton.pro - Знакомый нам профайл проекта;
  • deployment.pri - файл для установки исходного кода на устройство;
  • main.cpp - давно знакомый стартовый файл приложения
  • qml.qrc - файл ресурсов проекта, там и складируются qml файлы
  • main.qml - файл qml главного окна приложения
  • MainForm.ui.qml - и опять ресурсный файл дизайнера, да простят меня хардкорщики. В нём и будут прятаться кнопки. Проект создавался под минимальную версию Qt 5.5.
8 октября 2015 г. 17:03

Qt

GameDev, Qt, Collision, Коллизия

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

7 октября 2015 г. 15:26

Qt

QGraphicsScene, Qt, Qt урок, перетаскивание, QGraphicsItem

Допустим, что вы делаете приложение, которое будет отображать на графической сцене элементы сетевой инфраструктуры. Вопрос в том, как сделать перемещение этих элементов мышью, то есть осуществлять перетаскивание элементов. Иными словами брать элемент мышью и осуществлять его перемещение в другое место графической сцены.

Давайте разберёмся, как это сделать.

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

Для демонстрации примера создаём новый проект и добавляем в него новый класс, отнаследованный от QGraphicsItem .

  • MoveGraphicsItem.pro - профайл проекта;
  • main.cpp - запускающий файл;
  • widget.h - заголовочный файл главного окна;
  • widget.cpp - файл исходных кодов главного окна;
  • moveitem.h - заголовочный файл графического элемента;
  • moveitem.cpp - файл исходных кодов графического элемента.
  • widget.ui - форма главного окна.
6 октября 2015 г. 17:13

Qt

WinAPI, Qt, ICMP, PING

Сходу хочу расстроить Вас, Дорогой Читатель. Qt не обладает функционалом для работы с протоколом ICMP и соответственно придется использовать для этих целей API целевой операционной системы. Впрочем, это не удивительно. Протокол ICMP является низкоуровневым протоколом, и для работы с ним требуется использование сырых сокетов, которые не реализованы в Qt .

Но это не является особой проблемой, поскольку в основных целевых платформах имеется необходимый API для реализации ping посылок. Например Microsoft предоставляет простое использование ICMP протокола на основе функции IcmpSendEcho.

Описание IcmpSendEcho

Функция IcmpSendEcho отсылает эхо запросы IPv4 ICMP и возвращает ответы на эхо запросы. Вызов возвращается когда выходит время ожидания или заполняется буфер ответа.

DWORD IcmpSendEcho(
  _In_     HANDLE                 IcmpHandle,
  _In_     IPAddr                 DestinationAddress,
  _In_     LPVOID                 RequestData,
  _In_     WORD                   RequestSize,
  _In_opt_ PIP_OPTION_INFORMATION RequestOptions,
  _Out_    LPVOID                 ReplyBuffer,
  _In_     DWORD                  ReplySize,
  _In_     DWORD                  Timeout
);
5 октября 2015 г. 14:58

Qt

GameDev, Qt, Enemy

В двух предыдущих статьях, где мы научили героя отслеживать перемещения курсора и стрелять в направлении цели , настало время добавить в игру мишени и начать их уничтожать. Уничтожение мишеней будет происходить тогда, когда у мишеней закончится жизнь. При этом у каждой из мишеней будет случайное количество очков жизни, а каждая пуля будет наносить случайное количество урона. Также у каждой мишени будет находиться полоска жизни, которая будет уменьшаться при нанесении урона.

Уничтожение на основе CallBack функции

Для реализации данного алгоритма создадим класс мишени Target , а также добавим в класс Bullet возможность вызова CallBack функции , которая будет реализована в классе главного окна приложения и будет наносить урон мишеням.

3 октября 2015 г. 16:56

Qt

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

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

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

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

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

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

1 октября 2015 г. 14:55

Qt

GameDev, bullet, Qt, пуля

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

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

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

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

30 сентября 2015 г. 0:17

Программы

Free Video Editor, video editor, VSDC, видеоредактор

Бесплатный видеоредактор, который ещё ко всему и хорошо работает? Я вот тоже думал, что я такой не найду... Однако нет. Такой видеоредактор существует. И самое главное, он справляется со своей функцией. Этот видеоредактор называется VSDC Free Video Editor .

Дело в том, что для некоторых статей я делаю видеоуроки, записывая видео с экрана компьютера, а также добавляю туда заставку с аудиодорожкой. Для этого требуется производить монтаж видео. Я перепробовал множество видеоредакторов и все они по-своему не устроили. Расскажу про несколько из них:

  • Pitivi - видеоредактор, который я использовал под linux, всем хорош, но вылетает периодически;
  • Microsoft Movie Maker - какой-то странный и не понятный для меня, просто не понравился;
  • Nuke - мощные видеоредактор, с помощью которого делали фильм Avatar, имеется бесплатная некоммерческая лицензия. Но он жутко прожорлив для ресурсов, что привело к невозможности комфортной работы на моём ноутбуке;
  • Sony Vegas - довелось поработать, но как люди за него деньги отдают? Тормозное ПО.
  • Adobe Premiere - всё хорошо, но при импорте видео часто сдвигал аудио и видео дорожки и выдавал артефакты на картинке. Возможно мне просто не повезло, и я не прав относительно этого ПО, по опыт у меня были именно такой.

Этот список можно продолжать и дальше, но не будем. Всё, что мне нужно было, это нормальный монтаж нескольких видео и аудиодорожек с простым эффектом перехода а-ля прозрачность . И мне повезло найти этот бесплатный видеоредактор.

29 сентября 2015 г. 1:05

Программы

захват видео, запись видео, screen recorder

В поисках адекватного ПО для захвата видео с экрана пришлось перелопатить приличное количество посредственных программ, в которых постоянно что-то не устраивало. Или они подглючивали, или не работали, или тащили за собой уйму всякого подозрительного программного обеспечения. Либо они были платными, что также не особо радовало, поскольку платить за кота в мешке тоже не хотелось.

Таким образом, в поисках необходимого программного обеспечения мне довелось наткнуться на Icecream Screen Recorder .

Icecream Screen Recorder распространяется в двух вариантах:

  • Бесплатная версия - не работает часть функций, а также время записи с экрана ограничено 10 минутами. Но если Вы делаете видеоуроки, то это не проблема, поскольку можно остановить запись и запустить её заново, а позже смонтировать видео в редакторе;
  • Версия Pro - отсутствует ограничение на длительность видео, поддерживается запись в несколько видеоформатов, имеется возможность установки водяного знака на видео.

Обзор Icecream Screen Recorder

Главное окно

28 сентября 2015 г. 16:29

Qt

Qt, mouse, cursor, отслеживание, QGraphicsScene, GameDev

Все помнят игру Crimsonland ? Там нужно было валить монстров штабелями. Для перемещения по игровому полю мы использовали клавиши W, A, S, D, а для направления стрельбы курсор мыши , за которым производилось отслеживание. Так вот, сам по себе механизм работы этого самого отслеживания мыши предельно прост. Реализаций может быть множество, в зависимости от используемых инструментов в программировании, но если говорить об обычном QGraphicsScene , то позвольте продемонстрировать Вам мой вариант реализации подобного механизма.

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

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

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

  • TargetMotion.pro - Профайл проекта;
  • widget.h - Заголовочный файл основного окна приложения;
  • widget.cpp - Файл исходных кодов основного окна приложения;
  • triangle.h - Заголовочный файл главного героя Красного Треугольника;
  • triangle.cpp - Файл исходных кодов главного героя Красного Треугольника;
  • customscene.h - Заголовочный файл кастомизированной графической сцены;
  • customscene.cpp - Файл исходных кодов кастомизированной графической сцены;
  • cursor.qrc - файл ресурсов, в котором содержится кастомизированный курсор мыши.
ДД
13 декабря 2018 г. 16:24
Дмитрий Дубовик

C++ - Тест 005. Структуры и Классы

  • Результат:66баллов,
  • Очки рейтинга-1
13 декабря 2018 г. 16:04
Metelev

Qt - Тест 001. Сигналы и слоты

  • Результат:47баллов,
  • Очки рейтинга-6
YC
12 декабря 2018 г. 18:49
Yaroslav Chernetskyi

Qt - Тест 001. Сигналы и слоты

  • Результат:31баллов,
  • Очки рейтинга-10
Последние комментарии
V
15 декабря 2018 г. 2:06
Vlad15007

Спасибо большое!Очень помогли!
11 декабря 2018 г. 21:01
Евгений Легоцкой

Не знаю, какой-там конкретно эффект и если честно не хочется fl studio ради того, чтобы посмотреть устанавливать, но из того, что увидел в интернете. Предполагаю, что то, что вы хотите с...
V
11 декабря 2018 г. 19:25
Vlad15007

Подскажите пожалуйста ( я новичок совсем)Можно ли организовать спрайт без этого окошка (как в fl studio fruity dance)?
11 декабря 2018 г. 15:06
Евгений Легоцкой

Что интересно, если написать так from <application_name>.<module_name> import <filename> ,то PyCharm сносит крышу, если разрабатываешь в рамках проекта приложение, ко...
11 декабря 2018 г. 14:52
Илья Чичак

Тут мне тоже есть что сказать=) Сами разрабы советуют импортировать следующим образом: from <application_name> import <module_name> Стоит избегать from . import &l...;
Сейчас обсуждают на форуме
ИМ
18 декабря 2018 г. 15:29
Игорь Максимов

Доброго времени суток. Имеется модель для видео-контента (Movie), а конкретно привязана сейчас к одной модели(Compilation). Появилась необходимость добавить еще одну модель (Category) и связа...
R
18 декабря 2018 г. 12:25
RED_Spider

именно так, проблема в кодировке, а именно в отсутствии шрифтов на сервере, для меня вопрос решился в CentOS 7yum install curl cabextract xorg-x11-font-utils fontconfig всем спасибо за ...
U
18 декабря 2018 г. 10:39
Unreal_man

А вот этот коннект здесь и вовсе не нужен connect(ui->ok3, &QPushButton::clicked, this, &Widget::addToText); А как же без него? ============================== ...
m
17 декабря 2018 г. 19:03
melnik10

Спасибо, попробую!
R
16 декабря 2018 г. 14:41
RED_Spider

перевірено все працює http://doc.qt.io/qt-5/appicon.html Setting the Application Icon on Windows First, create an ICO format bitmap file that contains the icon image. This ca...
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы