воскресенье, 4 января 2015 г.

Скрещивание Qt (+QtCtreator IDE) с компилятором MS Visual Studio 2012 (ver 11.0)

Ох, много седых волос прибавилось за этот долгий день. Итак, самым главным откровением оказалось то, что студия 2012 года является версией 11.0. Необходимо установить Windows SDK (советую отказаться от документации - сэкономит около 2,5Гб при установке с онлайновым инсталлятором). Далее необходимо установить переменные окружения. Пусть студия находится по адресу C:\Program Files (x86)\Microsoft Visual Studio 11.0, а Qt - C:\Qt\5.4

MSVS11ROOT="C:\Program Files (x86)\Microsoft Visual Studio 11.0"
INCLUDE="%MSVS11ROOT%\VC\include\;C:\Program Files (x86)\Windows Kits\8.0\Include\um"
LIB="%MSVS11ROOT%\VC\lib;C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86;"
LIBPATH="%MSVS11ROOT%\VC\lib\"
QTDIR="C:\Qt\5.4"
QMAKESPEC="win32-msvc2012"
PATH="...;C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin;C:\Qt\Tools\mingw491_32\bin;C:\Qt\5.4\msvc2012_opengl\lib;C:\Program Files (x86)\Windows Kits\8.1\bin\x86"

Когда компилятор ругался крокозябрами на то, что не нашел тулы для сборки (всякие cl.exe, mt.exe), необходимо соответствующий путь добавлять в переменную Path. Ошибка с необнаруживаемым заголовочником stddef.h относится к переменной INCLUDE.

Переменные окружения можно делать и пользовательскими, главное - не забывать перезагружаться/перелогиниться в системе после каждого изменения в переменных!

вторник, 9 декабря 2014 г.

Подсветка синтаксиса программного кода в Blogger ( blogspot )

#include<iostream>

int main()
{
    std::cout << "Hello World!" << std::endl;
    std::cin.get();
    return 0;
}
Дошли руки разобраться с подсветкой синтаксиса для блога, сразу пилю заметку (в сети много копипасты, пусть будет альтернативное изложение).

вторник, 11 марта 2014 г.

Qt основы многопоточности

Правильная реализация многопоточности Qt

В старых учебниках по Qt (того же Шлее) указывается, что для создания потока, необходимо унаследоваться от класса QThread, перегрузив виртуальный метод void run(), в духе Java. Проблема в том, что с некоторого времени класс QThread перестал быть чисто виртуальным (абстрактным), что уже не требует реализации метода run() и какого-либо наследования. Специалисты и документация утверждают, что QThread является вполне себе интерфейсом к объекту потока, и что наследование от него обязательно приведет к беде при использовании сигналов и слотов базового класса.


четверг, 20 февраля 2014 г.

IBM Lotus Notes, проблема с запуском.



Патологически мне не везет на корпоративную почту. В этот раз я сижу в обнимку с и без того печальным IBM Lotus Notes.



Признаки



После запуска просит предъявить пароль. После ввода "моргает" главным окном и впадает в вечную загрузку под сплеш-скрин с зациклившимся прогрессбаром. На повторный запуск сразу - никакой реакции, в памяти висят 3-4 процесса. Если их убить, ситуация повторяется. Перезагрузка не помогает.


вторник, 11 февраля 2014 г.

Си и ООП

Наверное, стоило бы ребенка на велосипеде с квадратным колесом ставить сейчас. Сегодня будем фантазировать на тему ООП на С.

Что-то вроде боли или сплиттер в диалоге

Сколько раз собирался, но это уже край) Хочу передать сердешный привет компании Microsoft с ее замечательным фреймворком для программирования на C++ под Windows - MFC (Microsoft Foundation Classes). Я не считаю себя гуру или даже профессионалом C++/Windows. Много раз сталкивался с этим тулом на мелких задачах и каждый раз он меня удивлял своей неоднозначностью. Иногда на нем задача решается элегантно, в 3 строки, которые, если лень, можно еще и обернуть в необходимые классы, нагенерив их Wizard'ом. А порой начинается ад: не понятно что, как и куда пихать, классы путаются с POD-струкрурами, StackOverflow радует примерами на чистом С. Ну так вот. Потом я познакомился с WindowForms в .Net Framework (что казалось полным трапом, ибо совсем все просто О_о ), затем Java с ее AWT/Swing, далее вовсе QtGui. Сердце подсказывало опасаться MFC и тратить время с пользой - собственно на winAPI.

Проект со злосчастным сплиттером - внутри


вторник, 28 января 2014 г.

Конвертирование изображений OpenCV в CBitmap (MFC-winapi).

Так и не смог найти ресурс, где бы это обсуждалось более сниппета кода с использованем каких-то не документированных функций winapi и OpenCV. Что странно, тема-то популярная. В основном помогла разобраться википедия . Русская версия достаточно скудна, потому долго не мог понять, как правильно выравнивать буфер данных в памяти.
Имеем: указатель на структуру IplImage из OpenCV и указатель на CBitmap (тонкая обертка над BITMAP в MFC).



В последнем нас интересует исключительно метод CBitmap::CreateBitmap(), который инициализирует класс.

BOOL CreateBitmap( 
int nWidth,
int nHeight,
UINT nPlanes,
UINT nBitcount,
const void* lpBits
);