Реклама
28 июля 2016 г. 21:40

QtQt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC

Boost, MinGW, MSVC, Qt

Первоначальное знакомство с Boost под Windows начну со сборки предкомпилированных  библиотек и подключения их к проекту на Qt. При этом воспользуюсь кодом одного из Hello World-ов из документации Boost, а именно с установки locale с использованием boost.

Сборка Boost для MinGW

Вначале скачиваем последнюю версию Boost (на момент написания статьи это версия 1.61) и распаковываем архив в одну из папок. В моём случае архив был распакован по следующему пути:

D:\EVILEG\boost_1_61_0

После чего открываем консоль и переходим в эту папку. В данной папке имеется батник bootstrap.bat для сборки инструмента bjam, который предназначен для управления компиляцией библиотек под целевой компилятор.

Чтобы собрать данный инструмент для MinGW необходимо выполнить следующую команду:

bootstrap.bat gcc

После того, как инструмент будет собран выполняем сборку всех необходимых библиотек следующей командой:

b2 toolset=gcc link=shared --prefix=boost_mingw_530 install  // ,где
    // toolset  - это инструментарий, которым будут собираться библиотеки, 
    //            то есть тип компилятора, которым Вы будете собирать библиотеки
    // link     - это тип библиотек, в данном случае shared - динамические
    // --prefix - папка куда будут скопированы заголовочные файлы и собранные библиотеки
    //            в моём случае D:\EVILEG\boost_1_61_0\boost_mingw_530

Далее можно заняться своими делами, поскольку процесс этот не быстрый.

14 июля 2016 г. 15:57

QMLИгра на QML - Урок 1. Игровая арена и динамические объекты

JavaScript, QML, Qt, динамические объекты, игровая арена

После первого опыта по написанию игры на Qt под Android, хочу поделиться этим опытом и предлагаю вместе написать простенькую игру в стиле "Убей крота". Это игра, в которой нужно успевать попадать по кротам, которые вылазят из нор, но учитывая, что это будет упрощённая игра, то вместо кротов используем круглые мишени, которые будут появляться на игровом поле. В качестве игрового поля будет использовать сетку 6 на 6 ячеек. Но для создания поля не будет использоваться какой-то специальный объект, типа GridLayout . В игровом поле сетка будет формироваться из количества строк, колонок и длины стороны квадратной ячейки. Данные о заполненности ячейки будут храниться в двумерном массиве, который будет сформирован в javascript составляющей (на забываем, что QML - это декларативный JSON-подобный язык с поддержкой javascript).

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

Проект состоит из следующих файлов:

  • TargetGame.pro - профайл проекта;
  • deployment.pri - файл сборки и деплоя проекта;
  • main.cpp - файл с main функцией проекта;
  • main.qml - основной файл QML-слоя с объектом главного окна приложения;
  • Target.qml - файл QML с описанием объекта мишени;
  • Target.png - внешний вид мишени является png рисунком;
  • GameArea.qml - игровая арена с сеткой для размещения мишеней;
  • logic.js - файл с javascript логикой игры.

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

14 июля 2016 г. 15:00

QMLИгра на QML - Урок 2. Добавляем следы от выстрелов и систему очков

GameDev, QML, Qt, система очков

После того, как была сделана игровая арена и добавлены мишени, настало время реализовать попадание по мишеням, промахи и систему начисления и списывания очков.

Система начисления и списывания очков будет следующая:

  • В случае промахов, предлагаю сделать следы пулевых отверстий, нескольких видов, а также списывание по одному очку с игрового счёта.
  • В случае исчезновения мишени без попадания по ней также сделать списывание одного очка с игрового счёта.
  • В случае попадания по мишени начислять от одного до пяти очков в зависимости от того, насколько близко к центру пришлось данное попадание.

Счёт будет отображаться в верхней части игрового поля.

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

Для реализации данной задумки понадобится, кроме модификации части файлов, добавить следующие файлы:

  • InfoBar.qml - который будет отображать информацию о счёте;
  • Bullet.qml - файл с описанием типа пулевого отверстия;
  • bullet-1.png, bullet-2.png, bullet-3.png, bullet-4.png, bullet-5.png, bullet-6.png - файлы с изображениями пулевых отверстий;

Возможные варианты пулевых отверстий размещаются в папке graphics, туда же было перенесено изображение мишени.

10 июля 2016 г. 13:03

RubyUser Guide #22 - Ruby - Локальные переменные

local variables, Ruby, ruby lesson, ruby уроки, user guide, локальные переменные, руководство пользователя

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

ruby> $foo
   nil
ruby> @foo
   nil
ruby> foo
ERR: (eval):1: undefined local variable or method `foo' for main(Object)

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

10 июля 2016 г. 13:01

RubyUser Guide #21 - Ruby - переменные экземпляра класса

Instance variables, Ruby, ruby lesson, ruby уроки, user guide, переменные класса, руководство пользователя

Имена переменных класса начинаются с символа @, и их область применения ограничивается областью видимости внутри класса, то есть той областью, на которую можно сослаться, используя переменную self . Два различных объекта, даже если они относятся к одному класса, могут иметь различные значения их переменных экземпляра класса. Снаружи объекта, переменные экземпляра не могут быть изменены или просмотрены (то есть переменные экземпляра класса в Ruby никогда не бывают публичными, public ), исключая те случаи, когда программист предусматривает для этого специальные методы. Как и в случае глобальных переменных, переменные экземпляра класса имеют значение nil , до тех пор, пока не будут инициализированы.

2 июля 2016 г. 20:13

QtQt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP

AIMP, QSS, Qt, QStyleSheet, аудио, аудио плеер, кастомизация

Статьи данного цикла:

В статье по работе с аудио плеером в Qt мы познакомились с тем, как проигрывать аудио треки и переключаться между ними в плейлисте.

А как насчёт того, чтобы кастомизировать внешний вид плеера так, чтобы он походил, например, на AIMP? Сразу для сравнения посмотрим на оригинальный AIMP и внешний вид плеера после кастомизации.

30 июня 2016 г. 22:53

QMLQML - Урок 026. Intents с Qt для Android, часть 1

Android, Qt, QML, Intent

"Intent" является главной возможностью для межпроцессорного взаимодействия в Android. В основном, Intent является объектом, который обрабатывается операционной системой и передаётся затем одному или большему количеству установленных приложений, основываясь на его содержании. Это может быть экземпляр запроса отображения видео, в данном случае тип intent должен быть ACTION_VIEW и mime тип должен быть установлен соответствующий. Приложения могут подписываться на соответствующие Intents в настройках фильтра intent в своих манифест файлах. В первый раз пользователю устройства будет предоставлен выбор, какие типы intent известны приложению и на какие можно подписаться. Если они выбраны, они будут установлены по умолчанию, или выбраны при вопросе от каждого экземпляра приложения при необходимости.

Это первая из нескольких статей, как использовать intents с Qt для Android.

Сам механизм имеет довольно общий характер. То, что описано выше является одним из способов использования, но intents также могут быть использованы и для другого: Одним из таких случаев является запуск сервисов внутри приложения. Это, как правило, называется "explicit intent", что означает, что предусмотрено для запуска полное имя сервиса, и не может быть перехвачено другим приложением.

Другим способом использования intents является широковещательный вариант (broadcast), для экземпляров, когда изменяется временная зона устройства. В это время как действия описанные выше позволяют запускать только одно определённое приложение, выбранное пользователем, то при широковещательном вариант сигнал будет передан во все приложения, которые были на него подписаны.

29 июня 2016 г. 19:06

QtQt/C++ - Урок 051. QMediaPlayer - Аудио плеер на Qt

QMediaPlayer, QMediaPlaylist, QStandardItemModel, Qt, аудио плеер

Предлагаю написать простенький аудио плеер для mp3 файлов с использованием Qt/C++, который будет иметь плейлист, возможность запуска/паузы/остановки треков, а также пролистывания треков.

Для реализации данной задумки в Qt имеются классы QMediaPlayer и QMediaPlaylist, которые относятся к модулю multimedia. А для отображения плейлиста воспользуемся QStandardItemModel и QTableView.

Статьи данного цикла:

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

  • SimplePlayer.pro - профайл проекта;
  • main.cpp - файл с функцией main;
  • widget.ui - файл формы окна приложения;
  • widget.h - заголовочный файл окна приложения;
  • widget.cpp - файл исходных кодов окна приложения;
  • buttons.qrc - ресурсный файл иконок кнопок приложения.
29 июня 2016 г. 12:59

RubyUser Guide #20 - Ruby - глобальные переменные

global variables, Ruby, ruby lesson, ruby уроки, user guide, глобальные переменные, руководство пользователя

Глобальные переменные имеют имя, которое начинается с символа $ . Данная переменная может быть доступна из любого места программы. Перед инициализацией глобальная переменная имеет особое значение nil.

ruby> $foo
   nil
ruby> $foo = 5
   5
ruby> $foo
   5

Глобальные переменные следует использовать с осторожностью. Они очень опасны, потому что они могут быть перезаписаны откуда угодно. Чрезмерное использование глобальных переменных может затруднить отлов багов. Это также является звоночком, что дизайн программы не был тщательно продуман. Всякий раз, когда вы используете глобальную переменную, убедитесь что даёте ей имя, которое вряд ли будет использовано где либо ещё (например, назвать глобальную переменную как $foo явно плохая идея)

29 июня 2016 г. 12:57

RubyUser Guide #19 - Ruby - переменные

Ruby, ruby lesson, ruby уроки, user guide, variables, переменные, руководство пользователя

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

В большинстве языков переменные должны быть объявлены для того, чтобы указать их тип, модифицируемость (то есть должны ли они быть константами) и область применения; в то время как первое не является проблемой, то остальное можно увидеть из имени переменной, поэтому мы не нуждаемся в объявлении переменной в Ruby.

Первый символ в имени указывает категорию переменной:

  • $ - глобальная переменная
  • @ - переменная класса
  • [a-z] или _ - локальная переменная
  • [A-Z] - константа
Реклама

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 50 баллов
  • Очки рейтинга -4

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 80 баллов
  • Очки рейтинга 4

C++ - Тест 001. Первая программа и типы данных

  • Результат 6 баллов
  • Очки рейтинга -10
Последние комментарии

QML - Урок 002. Custom Button in QML Android

Нашел http://doc.qt.io/Qt-5/qtquickcontrols2-customize.html#customizing-button

QML - Урок 002. Custom Button in QML Android

А как кастомайзить Button если использовать QtQuick.Controls 2.0 ? В этом случае пишет Cannot assign to non-existent property "style"

  • EVILEG
  • 15 ноября 2017 г. 13:56

Qt/C++ - Урок 072. Пример векторного редактора на Qt

You need add common QWidget to form, after that you need right-click on this QWidget in the form and select "Promote to..." in Context Menu. After that You will see dialog. In dialog choose Ba...

  • cordsac
  • 15 ноября 2017 г. 3:33

Qt/C++ - Урок 072. Пример векторного редактора на Qt

Sir,In this form design how did you add verectanglesettings.ui,vepolylinesettings.ui UI's to this mainwindow.ui ? have any QT tool to add so. this image shows what I meaning.

Сейчас обсуждают на форуме
  • Docent
  • 21 ноября 2017 г. 19:39

Видео на сцене QGraphicsScene, как правильно сделать?

Ситуация такая: имеется область в памяти в которую пишутся кадры с камеры. Каким наиболее оптимальным образом отобразить их на сцене. У меня это реализовано таким образом, но подозреваю что мо...

Многопоточность. Ошибки при обращении к переменной

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

как отключить событие при открытии формы?

как обойти проблему: см. комментарий кода - может кто подскажет. TableView { id: table model: tableModel anchors.fill: parent focus: true Component.onComple...

  • EVILEG
  • 21 ноября 2017 г. 14:40

QGraphicsItem конструктор с параметрами

За что именно отвечают x_c , y_c ? Это положение объекта на графической сцене? Тогда лучше не в методе paint их применять, а через метод setPo...

  • EVILEG
  • 21 ноября 2017 г. 1:36

QGraphicsItem

Я так понимаю, вы каким-то образом передаёте указатель на отрисовываемый текст, то есть на QString. Но лучше добавить переменную в объявление класса, которая будет отвечать за текст, и п...