Рекламодатель:
ООО «Нанософт разработка»

ИНН 7751031421 ОГРН 5167746333838

Рекламодатель:
ООО «АСКОН-Системы проектирования»

ИНН 7801619483 ОГРН 1137847501043

Рекламодатель:
АО «Цифровая мануфактура»

ИНН 5010058760 ОГРН 1086658008975

Рекламодатель: ЗАО «Топ Системы»

ИНН 7726601967 ОГРН 1087746953557

Рекламодатель:
ООО «С3Д Лабс»

ИНН 7715938849 ОГРН 1127747049209

8 - 2023

Как студенты МГТУ им. Н.Э. Баумана приделали «сигнализацию» к nanoCAD SDK и стали разработчиками в крупной российской IT-компании

Арсений Пронин, младший программист Группы сопровождения проектов ООО «Нанософт разработка»

Как добавить компиляцию метаданных Qt (moc.exe) в проект Visual Studio? Двое студентов МГТУ им. Н.Э. Баумана — Арсений Пронин и Илья Климов — готовятся стать IT-специалистами в области проектирования и разработки программного обеспечения. Проверить полученные знания на практике будущие программисты смогли в ходе стажировки в компании-разработчике инженерного ПО «Нанософт разработка». Благодаря открытому API Платформы nanoCAD стажеры не только собрали нужную компиляцию с примерами SDK nanoCAD, но и создали на ее основе новый проект Visual Studio. По результатам успешной стажировки студенты были зачислены в штат разработчиков компании.

Погружение в API nanoCAD

Проект однокурсников преследовал две цели:

  • дополнить компиляцией метаданных текущий проект из SDK с помощью расширения Qt VS Tools и без него;
  • создать проект с нуля, используя те же исходники.

На первом этапе студенты изучили API с помощью учебного курса по программированию на .NET и NRX в Платформе nanoCAD. Полученные знания помогли разобраться в технике работы с чертежом через API. Обратную связь по ходу изучения программы обеспечивал руководитель проекта в рамках стажировки Илья Слободин, возглавляющий группу поддержки API.

Авторы проекта — Арсений Пронин (слева) и Илья Климов

Авторы проекта — Арсений Пронин (слева) и Илья Климов

Следующим шагом стала реализация диалогового окна для копирования объектов чертежа на NRX с использованием Qt — мощного кроссплатформенного инструмента для создания приложений и графического интерфейса. При решении поставленной задачи требовалось разобраться, как в среде разработки Visual Studio использовать Qt вместе с API nanoCAD. Было непонятно, как подключить к проекту Visual Studio метаобъектный компилятор (moc.exe) и компилятор пользовательского интерфейса
(uic.exe), которые использует Qt.

Один из вариантов решения этой задачи — написание собственного .pro­файла, по которому qmake сгенерирует правильный проект, где уже автоматически будет вызываться нужный компилятор. Но этот вариант не был доведен до конца, поскольку нашелся другой, более простой способ использования метаобъектного компилятора Qt: расширение Qt VS Tools. С его помощью легко создавать проекты, использующие moc.exe и uic.exe, прямо в Visual Studio.

В результате проект разработали с нуля, используя исходники из примера HelloQt SDK nanoCAD. Однако при его сборке компилятор выдавал ошибку C2440. Стажеры изучили все параметры командной строки, которые использовались в примере HelloQt из NCadSDK, но не смогли найти флаг, который создавал ошибку. Тогда Илья Слободин порекомендовал воспользоваться утилитой Process Monitor для отслеживания командной строки, чтобы сравнить параметры нового проекта с примером HelloQt. Оказалось, что Visual Studio прячет опции во временный файл, поэтому решено было воспользоваться инструкцией из платформы stackoverflow.

Другой вариант решения задачи — успеть при компиляции вручную перехватить временный файл, скопировав его куда­либо, однако это более сложная процедура. Спустя еще несколько десятков флагов программисты нашли тот самый, из­за которого появлялась ошибка C2440: /Zc:referenceBinding. Он добавлялся к проекту расширением Qt VS Tools. Проблему решили простым добавлением флага /Zc:referenceBinding­.

Далее студенты разбирались, как дополнить компиляцией метаданных существующий проект Visual Studio. Во время исследований Арсений Пронин обнаружил нужную инструкцию, но, поскольку ее версия была устаревшей, пришлось вносить правки.

Рис. 1. Ошибка C2440

Рис. 1. Ошибка C2440

Возникающую в ходе работы ошибку (рис. 1) исправляли путем добавления переменной среды $(QtToolsPath) = $(QtRoot)\bin, где $(QtRoot) =
C:\Qt\5.15.1\msvc2019_64 — это путь до папки Qt версии 5.15.1 для 64­битной версии msvc2019. Таким образом можно дополнить компиляцией метаданных любой проект Visual Studio.

Когда нужно было обойтись без расширения Qt VS Tools, программисты изменяли .vcxproj­файл вручную: убеждались, что Qt установлен на компьютер, а затем в файле проекта вызывали uic.exe для всех .ui­файлов и moc.exe для всех header­файлов, использующих макрос Q_OBJECT. После этого компилировали всё остальное, включая сгенерированные файлы, начинающиеся с moc_.

Процесс отработали на примере C++­проекта Visual Studio, включающего файлы, относящиеся к Qt, и прочие файлы, которые не нужно собирать с помощью компиляторов Qt: класс QtWidgetsClass с макросом Q_OBJECT (QtWidgetsClass.h, QtWidgetsClass.cpp) и файлы QtWidgetsClass.ui, HelloQt.cpp, stdafx.h.

В файл проекта добавили элемент ItemGroup, в котором делается кастомная сборка и компиляция с вызовом moc.exe и uic.exe:

 

   

      %(AdditionalInputs)

      $(QtRoot)\bin\uic.exe .\QtWidgetsClass.ui ­o “$(IntDir)\ui_QtWidgetsClass.h”

      UIC QtWidgetsClass.ui

      $(IntDir)\ui_QtWidgetsClass.h;%(Outputs)

   

   

      %(AdditionalInputs)

      $(QtRoot)\bin\moc.exe .\QtWidgetsClass.h ­o “$(IntDir)\moc_QtWidgetsClass.cpp”

      MOC QtWidgetsClass.h

      $(IntDir)\moc_QtWidgetsClass.cpp;%(Outputs)

   

   

 

Элемент, приведенный выше, должен быть расположен перед элементом ItemGroup, включающим элементы , и предназначенные для файлов проекта, не относящихся к Qt:

 

 

 

    Create

    Create

    Create

    Create

 

Далее в компиляцию был добавлен элемент ItemGroup с элементом ClCompile для файлов, сформированных компилятором Qt:

 

   

      /FIstdafx.h %(AdditionalOptions)

  

 

Затем программисты добавили путь $(IntDir) в Visual Studio: Menu -> Project -> Properties -> Configuration Properties -> C/C++ -> General -> Additional Include Directories, чтобы проект смог найти сгенерированные файлы. Следующим шагом стало добавление пути к папке с Qt на компьютере в переменной среде $(QtRoot). При использовании этого способа нет необходимости добавлять флаг /Zc:referenceBinding­.

Воодушевившись успешными результатами проекта, студенты реализовали модули для nanoCAD «Проводник файлов» и «Редактор CSS с подсветкой синтаксиса», используя Qt и свои наработки.

Работа студентов МГТУ им. Н.Э. Баумана получила высокую оценку руководителя. Однокурсникам было предложено развивать свой проект и далее, но уже в штате сотрудников «Нанософт разработка». Предложение принято, сейчас недавние стажеры участвуют в создании модулей и команд для новых версий программных продуктов линейки nanoCAD.

Инструкции по программированию в API nanoCAD

Результаты работы Арсений и Илья оформили в виде инструкций по программированию для примера HelloQt из SDK nanoCAD версии
NC_SDK_22.0.5944.3726.6053 (в новых версиях SDK компиляция метаданных Qt (moc.exe) уже добавлена):

Скачать их можно по ссылкам:

Как дополнить компиляцией метаданных проект Visual Studio с примерами из SDK nanoCAD с помощью расширения Qt VS Tools

Как дополнить компиляцией метаданных проект Visual Studio с примерами из SDK nanoCAD с помощью расширения Qt VS Tools

Как дополнить компиляцией метаданных проект Visual Studio с примерами из SDK nanoCAD без расширения Qt VS Tools

Как дополнить компиляцией метаданных проект Visual Studio с примерами из SDK nanoCAD без расширения Qt VS Tools

Как создать новый проект с нуля, используя исходники проекта HelloQt из SDK

Как создать новый проект с нуля, используя исходники проекта HelloQt из SDK

До новых встреч!

Регистрация | Войти

Мы в телеграм:

Рекламодатель:
ООО «Нанософт разработка»

ИНН 7751031421 ОГРН 5167746333838

Рекламодатель: ЗАО «Топ Системы»

ИНН 7726601967 ОГРН 1087746953557

Рекламодатель: ООО «ПЛМ Разработка»

ИНН 6658560933 ОГРН 1236600010690

Рекламодатель: ООО «КЭЛС-центр»

ИНН 7707548179 ОГРН 1057746796436

Рекламодатель: ООО «А-Кор»

ИНН 9731125160 ОГРН 1237700820059