Реклама
15 мая 2016 г. 14:16

Ruby on Rails - Первый старт под Windows

РуководствоRubyRails, Ruby, Ruby on Rails, web, Wordpress1202

Работая с Wordpress на хостинг-провайдере TimeWeb уже почти год, начинаю проявлять всё больший интерес к веб-разработке. В частности это также связано с тем, что данная CMS всё же достаточно прожорлива до ресурсов, а также и с тем, что начинают появляться мысли по поводу новых проектов. Да и в плане расширения кругозора в области программирования хотелось бы попробовать чего-нибудь иного, отличного от Qt/C++ .

Поэтому выбор пал на Ruby on Rails . Здесь я получаю и нечто иное, отличное от Qt/C++ , а также и возможность поработать в области веб-разработки в своё удовольствие.

Полистав немного документацию и примеры первого запуска веб-сервиса в стиле "Hello world!" , я решил поделиться тем, что из этого вышло.

9 мая 2016 г. 23:12

Qt/C++ - Урок 047. QThread - создание потоков в Qt

РуководствоQtQt, QThread, потоки1665

Одним из распространённых способов создания отдельных параллельных потоков в приложении на Qt и выполнения полезных действий в них является наследование от класса QThread и переопределение метода run() , в котором и будет выполняться полезный код приложения. При знакомстве с потоками довелось прочитать различные мнения на эту тему, и в данном уроке познакомимся с одним из возможных способов работы с потоками, но который считается не самым лучшим вариантом.

Вообще, если Мы производим наследование от класса QThread , то логично будет предположить, что это делается с той целью, что нам недостаточно функционала данного класса. Но когда это делается лишь с той целью, чтобы вынести в метод run() некий полезный код, который должен выполняться в отдельном потоке, то  тут явно что-то не так. К тому де может возникнуть проблема с масштабированием приложения и повторным использованием кода, особенно сильно это может проявится в том случае, когда подобных наследованных классов становится достаточно много.

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

16 апреля 2016 г. 22:23

QML - Урок 024. Custom QQuickItem - добавляем в QML объект из C++

РуководствоQMLCustom QQuickItem, QQuickItem, QQuickPaintedItem, Qt, QML1437

QML объекты в Qt весьма замечательны, с ними удобно работать, но что если стандартных объектов нам становится недостаточно? Тогда можно сделать собственный объект, запрограммировать его в C++ и внедрить в логику QML слоя. В данном уроке предлагаю сделать небольшой импровизированный таймер, который можно запустить, остановить и очистить, но при этом дизайн таймера будет разработан в C++ слое и по сути большая часть работы будет осуществляться в C++.

А для разработки кастомизированного QuickItem понадобится использовать QQuickPaintedItem, в котором будет таймер, представленный на рисунке ниже, который будет нарисован наподобие обычного QGraphicsItem , но он будет обладать рядом свойств, которыми можно будет управлять из QML слоя.

12 апреля 2016 г. 17:26

Управление PTZ-камерой. Протокол Pelco-P

РуководствоC++Pelco, Pelco-P, PTZ, протокол1136

В предыдущей статье был рассмотрен вариант работы с протоколом Pelco-D, а теперь рассмотрим работу с протоколом Pelco-P - это доработанная вариация предыдущего протокола управления PTZ-камерами, который также разработан одноимённой компанией Pelco. Также используется поверх интерфейса RS482/485 для связи с видеокамерами, оборудованными сервоприводами.

Протокол Pelco-P также имеет набор стандартных команд управления, а также расширенный комплект команд. Рассмотрим, как можем работать со стандартными командами. Протокол Pelco-P разберём на примере абстрактного источника команд и абстрактного SDK, которое принимает сообщение для дальнейшей передачи его в интерфейс RS485.

Таким образом имеется протокол, через который передаются данные, данные разбираются и дальше передаются в SDK, который уже отсылает сообщение в тракт передачи RS485. Ниже представлен рисунок, на котором имеется жёлтый квадрат. Именно в этой функции и будет формироваться необходимое нам сообщение, которое нужно будет передать в SDK.

7 апреля 2016 г. 23:05

Qt/C++ - Урок 046. QThread - Введение

РуководствоQtQt, QThread, потоки1260

GUI поток и рабочий поток

Каждая программа имеет один поток (thread) при запуске. Данный поток называется основным потоком или GUI потоком в Qt приложениях. Qt GUI должен запускаться в данном потоке. Все виджеты и несколько похожих классов, например QPixmap, не работают во вторичных потоках. Вторичным потоком обычно называют рабочий поток, который призван разгрузить основой поток программы.

Одновременный доступ к данным

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

7 апреля 2016 г. 22:07

Управление PTZ-камерой. Протокол Pelco-D

РуководствоC++Pelco, Pelco-D, PTZ, камера, протокол1922

Pelco-D - это протокол управления PTZ-камерами, разработанный одноимённой компанией Pelco. Как правило, используется поверх интерфейса RS482/485 для связи с видеокамерами, оборудованными сервоприводами.

Протокол Pelco-D имеет в арсенале набор стандартных команд управления, а также расширенный комплект команд. В данной статье разберёмся, как работать со стандартным комплектом команд. Протокол Pelco-D разберём на примере абстрактного источника команд и абстрактного SDK, которое принимает сообщение для дальнейшей передачи его в интерфейс RS485. Данная оговорка сделана нарочито, поскольку именно такая задача недавно встала передо мной.

Таким образом имеется протокол, через который передаются данные, данные разбираются и дальше передаются в SDK, который уже отсылает сообщение в тракт передачи RS485. Ниже представлен рисунок, на котором имеется жёлтый квадрат. Именно в этой функции и будет формироваться необходимое нам сообщение, которое нужно будет передать в SDK.

1 апреля 2016 г. 23:34

Три шага к успешной встраиваемой системе с Qt

НовостиQtemdedded, Qt, встраиваемые системы485

Разработка встраиваемых продуктов требует трех главных шагов: выбор аппаратной платформы, выбор операционной системы, и разработка пользовательского интерфейса (UI). Все три этих шага тесно связаны друг с другом и оказывают существенное влияние на время выхода на рынок, расходы по проекту и конечное качество продукта. Очень важно выбирать подходящую аппаратную платформу, которая также поддерживает отличную операционную систему и лучшие инструменты для разработки пользовательского интерфейса.

1. Выбор вашей аппаратной платформы

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

  • Имеется ли стабильная линия поставок/гарантий/долговременной поддержки/доступности? Если выбранная аппаратная платформа не доступна более шести месяцев, всё время разработки будет потрачено впустую и приведёт к значительным задержкам в проекте и увеличению стоимости.
  • Является ли эта платформа качественным продуктом? Многие разработки не сделаны с точки зрения лучших практик, что может вызвать сильную головную боль при будущих сбоях. В итоге замена одного бренда на другой приведёт к увеличению стоимости.
  • Является ли продукт гибким в плане обновления, что предоставит уменьшение времени и стоимости разработки для будущих ревизий?
1 апреля 2016 г. 22:51

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

РуководствоQtQGraphicsScene, Qt, SVG, Svg Reader1290

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

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

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

20 марта 2016 г. 22:31

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

РуководствоQtCorelDraw, QGraphicsScene, Qt, SVG1122

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

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

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

Qt WinAPI - Урок 003. Использование windeployqt для сбора DLL

РуководствоQtWinAPI, DLL, Qt, windeployqt, windows2126

В одном из уроков по Qt уже было показано, как собрать все DLL , применяемые в проекте для подготовки программы к использованию на других ПК, работающих под управлением ОС Windows , а теперь предлагаю ознакомиться с утилитой, которая поставляется вместе с Qt . Данная утилита называется windeployqt и является консольным приложением, которое, как правило, идёт в поставке с компиляторами MinGW или MSVC.

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

Утилита windeployqt располагается в папке bin , которая в свою очередь располагается в папке компилятора для Qt. Таким образом, путь к папке может быть следующим:

  • для MinGW - C:\QT\5.5\mingw492_32\bin\windeployqt.exe
  • для MSVC - C:\QT\5.5\msvc2013\bin\windeployqt.exe
Реклама
Последние комментарии
  • EVILEG
  • 23 мая 2017 г. 12:26

Qt/C++ - Урок 005. QSqlRelationalTableModel - Работаем со связными таблицами

В классе DataBase указывается путь к базе данных. В данном случае C:/example/ и т.д. Так вот, у вас есть каталог example ?

  • EVILEG
  • 23 мая 2017 г. 12:19

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

Нет. не верно. Ошибка вот в этой строке: QPixmap inixmap = fileName; // Сохраняем его в изображение объекта QPixmap; Выше я показывал, как что нужно путь передавать в качестве аргумент...

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "/home", tr("Images (*.png *.xpm *.jpg)")); QPixmap inixmap = fileName; // Сохраняем его в и...

Qt/C++ - Урок 005. QSqlRelationalTableModel - Работаем со связными таблицами

https://www.dropbox.com/sh/vhxcx0iyq0j4578/AACwgWPnZwNqGBndKESiXfFqa?dl=0

  • tetta
  • 22 мая 2017 г. 1:32

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

Как сделать так, что бы только когда верхнюю полосу зажимаешь, то перетаскивалось окно и что бы оно оставалось на месте?

Сейчас обсуждают на форуме
  • tetta
  • 23 мая 2017 г. 17:59

Создание кнопки "new", "save" и "open". MDI. toolBar

void MainWindow::open(){ QString openFile = QFileDialog::getOpenFileName(this, tr("Open File"), "C:/", ...

Проверка наличия записи в БД при выполнении запроса

Код форм про которые говорил прикрепил. regrdit форма в которой отображается информация отбираемая из базы. editobject форма для редактирования

  • Arrow
  • 23 мая 2017 г. 13:41

qmake

Странно по сообщениям выдает, что у меня компилирутся 32 bit версия (x86 build). Компилятор опознан правильно и в ABI сам определилил x86-windows-msys-pre-64bit и исполняемый файл создае...

WinApi CBTProc

Да всех активных, тоесть через CBT.