Thursday, June 06, 2013

Как подружить Qt5 с Visual Studio за 5 минут

Думаю многие из вас знакомы с таким мощным кросс-платформенным инструментарием, как Qt и насущной проблемой сборки Qt с Visual Studio. Недавно возникла необходимость перехода на новую, недавно вышедшую, 5 версию. К слову сказать, сам переход проблем не вызвал, да вот понадобилось использовать Qt в Visual Studio (обсуждение необходимости данной меры выходит за рамки этого топика). 

Последний раз, собирать Qt в Visual Studio мне приходилось 2 года назад, еще с версией 4.7.3 и, честно сказать, положительных эмоций от этой сборки у меня осталось мало не осталось. Как сейчас помню, необходимо было, минут 10-15 конфигурировать исходники Qt, а дальше в работу вступал jom, а работа его длилась ~3-4 часа (на моем Core i5-2430M). Только после сих деяний можно было писать на Qt в студии.

Перспектива повторения этих операций меня не радовала. Прочитав на хабре пару статей о попытках сборки Qt в Visual Studio выяснил, что теперь дела обстоят еще печальнее, для сборки необходимы: ActivePerl, Python, Ruby, ICU, плюс ко всему, весь процесс сборки теперь длится в разы дольше:

nmake собирал qtwebkit уже часов 8 к ряду. Сейчас прошло уже более суток с момента последнего запуска nmake

С грустной миной на лице, с осознанием всего наваливающегося груза, я поставил на скачивание исходники, перл и т.д. Без надежды на успех, решил попробовать подключить библиотеки Qt к Visual Studio так, как это делается с некоторыми библиотеками для использования WinAPI и, я долго не мог поверить, но — получилось! А теперь обо всем по порядку и подробней (хотя подробно даже нечего описывать, все весьма просто и думаю, что я отнюдь не первый, кто до этого додумался).

Предполагается, что Вы имеете уже установленные:
  • Microsoft Visual Studio 2010/2012
  • Qt5 msvc2010/2012
...
...

Создаем проект Qt5 (можно открыть имеющийся *.pro-файл, через меню Qt5). Пишем всеми любимый «Hello, World!»:

#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel *label = new QLabel("Hello world!");
    label->show();
    return app.exec();
}

Read more: Habrahabr.ru
QR: Inline image 1