Kuzevich

Kuzevich

Вторник, 18 декабря 2012 09:05

Диплом C++ Qt Box2D Google Protobuf

Как всегда на написание дипломного проекта времени оставалось мало поэтому решено было искать что то полу-готовое и делать из этого что то свое J

В условиях дипломного проекта было:

1.       Код на C++

2.       работоспособность под Linux

3.       Использование сети

4.       Использование открытых библиотек

Поиск по яндексу дал интересный проект «2D Шутер на C++ & Qt» а именно http://ru.twitch.tv/fippobak/b/330941403. Исходники здесь: https://github.com/bakwc/Epsilon5/

Все что нужно есть осталось это все собрать.

Для начала были скачаны:

1.      Qt: http://qt-project.org/downloads

2.      Box2D: http://code.google.com/p/box2d/

3.      Protobuf: http://code.google.com/p/protobuf/

И тут началось самое интересное.

Сначала я пытался объединить Qtlibraries и QtCreator. При открытии проекта выскакивало Подходящие профили Qt не найдены. После лазания по интернету и прочих мытарств я нашел лучшее решение. Все снес и скачал Qt SDK. Он, что называется, заработал из коробки. Почти… При сборке в окне вывода и проблем (issue) появились «крокозябры» (проблема с кодировкой). Опять яндекс и поиском я нашел: http://lab113.ru/qtcreator_kodirovka.php . Решилось заменой файла jom в папке C:\QtSDK\QtCreator\bin\ на скачанный по ссылке с сайта: http://lab113.ru/jom/x86/jom.exe

Ура. Теперь я могу прочитать что пишет мне копилятор. А пишет он мне следующее:

c:\distrib\programmer\bakwc-epsilon5-a625e59\bakwc-epsilon5-a625e59\eps5client\..\Eps5Proto\Epsilon5.pb.h:9: ошибка: C1083: Неудаетсяоткрытьфайлвключение: ../google/protobuf/stubs/common.h: No such file or directory

Ок. Изархива protobuf-2.4.1.zip  доставемпапку google, котораялежитв \protobuf-2.4.1\src\ икопируемв C:\QtSDK\Desktop\Qt\4.8.1\msvc2010\include\

Новаяошибка: c:\distrib\programmer\bakwc-epsilon5-a625e59\bakwc-epsilon5-a625e59\eps5client\..\Eps5World\world.h:12: ошибка: C1083: Неудаетсяоткрытьфайлвключение: Box2D/Box2D.h: No such file or directory

Изархива Box2D_v2.2.1.zip копируемпапку Box2D тудаже C:\QtSDK\Desktop\Qt\4.8.1\msvc2010\include\

Следущая ошибка :-1: ошибка: LNK1104: не удается открыть файл "protobuf.lib"

Нужно скомпилировать библиотеку protobuf. По нему хорошая статья здесь: http://mrnone.blogspot.ru/2011/05/google-protobuf.html В кратце:

Распакованный архив исходных файлов protobuf-2.4.1.zip в числе прочего содержит каталог vsprojects, содержащий проекты, для сборки Protobuf в Visual Studio. Открываем Visual Studio и в нем солюшен protobuf.sln

Собираем. Теперь собранные библиотеки, скопированные заголовки и компилятор protoc можно использовать в своём проекте. Копируем libprotobuf.lib, libprotobuf-lite.lib и libprotoc.lib в C:\QtSDK\Desktop\Qt\4.8.1\msvc2010\lib\. Обращаем внимание что проект ищет protobuf.lib а у нас libprotobuf.lib. В окне проектов Qt щелкаем на Eps5Client.pro и меняем строку

LIBS+=-lprotobuf-lbox2d-lglui–lfreeglut

на

LIBS+=-llibprotobuf-lbox2d-lglui–lfreeglut

Тожесамоеделаемив Eps5Server.pro толькотамстрока «LIBS += -lprotobuf». Тем более меняем на «LIBS+=-llibprotobuf-lbox2d-lgluilfreeglut» во избежании дальнейших проблем.

Теперь проекту не хватает :-1: ошибка: LNK1104: не удается открыть файл "box2d.lib"

Нужно собрать Box2D. По той же схеме идем в Box2D_v2.2.1\Box2D_v2.2.1\Build\vs2010\ открываем с помощью Visual Studio солюшн Box2D.sln и получаем Box2D.lib  FreeGLUT.lib  GLUI.lib. Их тоже копируем в C:\QtSDK\Desktop\Qt\4.8.1\msvc2010\lib\.

БРАВО! У нас все скомпилировалось. Дальше проще: в файле network.cpp клиента исправляем в строчке _socket->connectToHost(QHostAddress("193.169.33.254"),1238); адрес на свой, где будет запускаться сервер. Если вы тестируете н локальном компьютере можно написать 127.0.0.1. Пересобираем, запускаем, радуемся первому успеху!

Все запускается но видим черный экран клиента. Просто нет картинок.Копируем arbuz.png, mad.png и peka.png в папку с клиентом \Eps5Client-build-desktop-Qt_4_8_1_for_Desktop_-_MSVC2010__Qt_SDK__Debug\debug\ Пересобираем.

Все теперь можно побегать и пострелять.

 

P.S. в следующий раз опишу по изменениям - как я прикручивал сюда Box2D движок...

Занимаюсь внедрением Альфа-Авто 4.1 на предприятии сервиса грузовых автомобилей. Возникла потребность во внедрении модуля учета рабочего времени (УРВ). Приобретя ключ дополнительного модуля УРВ для Альфа-Авто в компании Рарус, мы так же купили сканер штрихкода (по совету менеджера)  HoneyWell Voyager 9540 (MS9540).

Для печати штрихкода нужно установить библиотеку 1С-BarCode. Ее можно взять с диска ИТС .\1CIts\EXE\TradeWare\1C\1CBarCode\1CBarCode.exe или найти в интернете. Так же на всякий случай установил . \1CIts\EXE\TradeWare\1C\ScanOPOS\ScanOPOS.exe

Далее для формирования штрихкодов у документов нужно зайти в программе Альфа-Авто Сервис->Установка прав и настроек, закладка «Права и настройки». Тип объекта Подразделение. И в дереве прав и настроек Документы->Общие параметры документов->Печать и оформление документов->Автоматическое штрих-кодирование (41487) поставить значение «да». Теперь при записи документов им будет присваиваться уникальный штрих-код.



Чтобы войти в АРМ сотрудника цеха нам нужно каждому сотруднику присвоить уникальный штрих код. В Сервис->Установка прав и настроек, закладка «Пользователи» находим или заводим нужного сотрудника (механика)



В верхней части окна нажимаем кнопку «карточка».



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



И уже тут внизу кнопкой печать выводим на принтер карточку пользователя.

На данном этапе мы имеем печатную форму Заказ-Наряда со штрихкодом и карточку сотрудника по которой исполнитель цеха будет заходить в свое Автоматизированное Рабочее Место.

Но не так все гладко :) Дальше встала самая главная проблема как связать сканер с программой. В стандартном варианте сканер работает как HID устройство (т.е. эмулирует ввод с клавиатуры) По большому счету Вы можете с тем же успехом набить цифры от руки по клавишам. Для того чтобы программа корректно работала со сканером нужно его правильно настроить. Перерыв весь интернет и по обрывкам собрав информацию выкладываю тут.

У сканера есть такое понятие как префикс и суффикс – это последовательность символов которая вставляется до самих цифр штрих-кода и после соответственно. При настройке альфа предлагает такими символами считать 3 плюса «+++». Но данная модель сканера поддерживает только по два символа. Соответственно нам нужно задать их в сканере и в программе. Возьмем за основу все те же плюсы только по два.

В инструкции к сканеру есть пункт «Конфигурация Префикса/Суффикса» (Configuration Prefix/Suffix) Следуя ей их и нужно задать.

В частности в моей модели было так:

1.       Входим в режим редактирования



2.       Выбираем № конфигурируемого префикса суффикса



3.       Вводим 3 цифры подряд ASCII кода нужного символа (в нашем случае у плюса код 043)



4.       Выходим из режима программирования

И так 4 раза: Prefix 1,Prefix 2, Suffix 1, Suffix 2.

Теперь если мы откроем «Блокнот» или любой другой текстовый редактор и просканируем штрихкод то увидим вначале и в конце последовательности символов по 2 плюса.

Сканер настроен!

Теперь нужно рассказать о нем программе.

Идем в Справочники->Розница и оборудование->Оборудование. Нажимаем зеленый плюс (добавить новое устройство). Выбираем класс оборудования – сканер штрихкодов, модель – Сканер клавиатурный, Подключено к этому компьютеру, Создать новое устройство.



Вот что в итоге получаем. Заходим на вкладку «Список параметров устройства» и в параметрах префикса и постфикса ставим по два плюса (или что вы там настраивали?! J ).

Все! Теперь когда приходит последовательность из плюсов драйвер сканера обрабатывает событие и адекватно заходит в Рабочее место сотрудника цеха по карточке, выбирает работы из Заказ-Наряда по штрихкоду и т.д.

 

УДАЧИ В НАСТРОЙКЕ!

Позвонил сейчас бухгалтер с вопросом почему в 1С Бухгалтерия 8 документ реализации не формирует проводки 62 90.

 

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

 Столкнулся с проблемой 1С 8.2 на Windows Server 2003 в части обращения первой к интернет поддержке и чтения оттуда XML фала. Программа вылетает, но на 10-20 раз может запуститься.

Сначала решил проблему отключением проверки обновлений при старте системы (обработку прикладываю). Но остались вылеты при запуске регламентированной отчетности.

В конечном итоге разобрался!!!

Нужно в свойствах Internet Explorer на вкладке "Безопасность" для зоны "Интернет" поставить уровень безопасности "Средний" (по умолчанию на сервере стоит "Высокий").