QCAD v3.23.0.2源码编译,使用VS2017+Qt5.12.5环境

简介: QCAD v3.23.0.2源码编译,使用VS2017+Qt5.12.5环境

QCAD 是一个免费、开源的计算机辅助绘图二维工具,功能强大。目前开源的二维CAD有QCAD、LibreCAD等,LibreCAD可以说是QCAD的分支版本。对比这两款开源软件,LibreCAD是纯C++开发,有boost库的依赖,源码比较重,而QCAD使用了Qt的Script模块(ECMAScript 5 - JavaScript 5),使用了C++和Javascript脚本两种开发方式。使用脚本来扩展功能比纯C++开发效率会高点,因为这些开源项目源码都很大,编译比较花时间。如果使用脚本来开发的话,没有编译时间,可以边写脚本边测试,很方便。


因为项目的需要,本人选择QCAD,并对其源码进行编译。本篇博文中,使用了VS2017+Qt5.12.5对QCAD v3.23.0.2版本的源码进行了成功的编译和运行。


一、环境准备


1、VS2017,Qt5.12.5/x86,Qt VS Tools插件


http://download.qt.io/official_releases/qt/


2、检查一下Windows环境变量是否正确:


设置Windows的环境变量。推荐使用工具Rapid Environment Editor。http://www.rapidee.com/


Path=F:\Qt\Qt5.12.5\5.12.5\msvc2017\bin


QTDIR=F:\Qt\Qt5.12.5\5.12.5\msvc2017


3、QCAD官网下载源码


https://www.qcad.org/en/  官网域名1


https://www.ribbonsoft.com/en/  官网域名2


https://qcad.org/en/dxflib-downloads dxflib库源码


https://www.ribbonsoft.com/en/dxflib-downloads dxflib库源码


https://github.com/qcad/qcad/tree/master/src/3rdparty/dxflib dxflib库源码


https://www.qcad.org/en/documentation/changelog 历次版本更新日志


https://github.com/qcad/qcad QCAD源码


https://www.ribbonsoft.com/doc/qcad/latest/developer/

4、解压源码包,确保以下文件夹存在(因为QCAD使用了Qt的Script模块,使用了C++和Javascript脚本两种开发方式。),若不存在则手动添加:


\QCAD\qcad-3.23.0.2\src\3rdparty\qt-labs-qtscriptgenerator-5.12.5


例如笔者的路径下原本就没有qt-labs-qtscriptgenerator-5.12.5,我把qt-labs-qtscriptgenerator-5.12.3拷贝为5.12.5,并且把qt-labs-qtscriptgenerator-5.12.3.pro文件名修改为qt-labs-qtscriptgenerator-5.12.5.pro


5、打开VS2017,主菜单->Qt VS Tools->打开qcad.pro文件,最后可能会提示出错(Import): Error(s): 23,没关系,不管它。


[15] - MAKEFILE_GENERATOR variable not set as a result of parsing : qcad-3.23.0.2.pro. Possibly qmake was not able to find files included using "include(..)" - enable qmake debugging to investigate more.


[16] - Project MESSAGE: ..\qcad-3.23.0.2


[17] - Project MESSAGE: ..\qcad-3.23.0.2.zip


[18] - Project MESSAGE: ..\qcad-3.vcxproj


[19] - Project MESSAGE: ..\qcad-3.vcxproj.filters


[20] - Project MESSAGE: ..\qcad-3.23.0.2


[21] - Project MESSAGE: ..\qcad-3.23.0.2.zip


[22] - Project MESSAGE: ..\qcad-3.vcxproj


[23] - Project MESSAGE: ..\qcad-3.vcxproj.filters


--- (Import): Error(s): 23


--- (qmake) : Exit Code: 3



二、编译qcadqt-labs-qtscriptgenerator-5插件(这个插件很重要,必须编译)


Qt脚本生成器是为Qt脚本生成Qt绑定的工具。 使用生成的绑定,您可以从Qt脚本中访问Qt API的大部分。 该插件源码来自:


https://github.com/shibukawa/qtscriptgenerator


https://github.com/sjinks/qtscriptgenerator


因为qcad与界面相关的功能都是用JavaScript脚本实现,所以需要编译Qt的脚本实现。找到源码的src目录中的3rdparty文件夹中与Qt版本对应的qt-labs-qtscriptgenerator,里面会已经生成了VS的解决方案。直接用VS打开解决方案,全部编译即可。


VS2017打开工程,编译:


\qcad-3.23.0.2\src\3rdparty\qt-labs-qtscriptgenerator-5.12.5\qcadqt-labs-qtscriptgenerator-5.sln



三、编译主程序


VS2017打开工程,编译:


\qcad-3.23.0.2\qcadqcad.sln


编译成功后,文件都会生成在指定的目录中,直接打开源码下面的debug文件中的qcad.exe即可以运行QCAD了。



四、常见问题解答


1、自己编译的debug或者release版本一运行自动退出了,怎么回事?


解决办法:需要编译qcadqt-labs-qtscriptgenerator-5插件就可以解决。编译的结果文件在路径:


\qcad-3.23.0.2\plugins\script\


注意:qcadqt-labs-qtscriptgenerator-5.sln不管是Debug还是Release的的编译结果的默认路径都是同一个,文件名也相同。这就比较麻烦了,编译完debug,再编译release的话,会把debug文件覆盖掉。这里请程序员注意一下。如果只是学习源码的话,release版本可暂不编译,只用debug版本即可了。


2、编译报错:error MSB6006: “cmd.exe”已退出,代码为 2


1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(209,5): error MSB6006: “cmd.exe”已退出,代码为 2。

1>已完成生成项目“.vcxproj”的操作 - 失败。


解决办法:选择项目,右键点击“Convert project to Qt  VS Tools project”,然后再次编译即可OK!

3、编译qcadcore和qcad时,报错:error LNK1104: 无法打开文件“\.obj”


工程-属性-链接器-输入-附加依赖项-lib的路径错乱了,如图:




修改为:




4、编译qcaddxf报错:


\qcad-3.23.0.2\src\io\dxf\rdxfimporter.cpp(130): error C2664: “bool DL_Dxf::in(std::istream &,DL_CreationInterface *)”: 无法将参数 1 从“std::ifstream”转换为“const std::string &”


解决办法:


#ifdef Q_OS_WIN

   wchar_t* winfn = new wchar_t[2000];

   int len = fileName.toWCharArray(winfn);

   winfn[len] = '\0';

  把 //bool success = dxflib.in(std::ifstream(winfn, std::ifstream::in), this);

替换为bool success = dxflib.in((const char*)fileName.toUtf8(), this);

5、编译qcadscripts报错:


4>qrc_scripts_release.obj : error LNK2005: "int __cdecl qInitResources_scripts(void)" (?qInitResources_scripts@@YAHXZ) 已经在 qrc_scripts.obj 中定义

4>qrc_scripts_release.obj : error LNK2005: "int __cdecl qCleanupResources_scripts(void)" (?qCleanupResources_scripts@@YAHXZ) 已经在 qrc_scripts.obj 中定义

4>  正在创建库 ..\..\plugins\\qcadscripts_debug.lib 和对象 ..\..\plugins\\qcadscripts_debug.exp

4>..\..\plugins\\qcadscripts_debug.dll : fatal error LNK1169: 找到一个或多个多重定义的符号


原因:不小心点击了菜单项Convert custom build steps to Qt/MSBuild




解决办法:重新打开qcad.pro文件,生成\qcad-3.23.0.2\src\scripts\qcadscripts.vcxproj.filters和qcadscripts.vcxproj文件。记住,千万不要再点击刚才提到的菜单项了。


6、QCAD所有的UI界面都是使用js实现的,入口是:\scripts\autostart.js


QCAD应用程序框架提供了CAD特定的功能,如CAD核心、DXF导出和导入、强大的图形视图等。ECMAScript文件将可用的功能组合到一个应用程序中。QCAD应用程序框架的ECMAScript接口可用于非常快速地构建和扩展CAD特定的应用程序。QCAD用户界面本身及其所有的交互工具以及大多数小部件和对话框都是通过ECMAScript接口实现的。每个QCAD包都附带的QCAD可执行文件本质上是一个脚本解释器,它具有标准的ECMAScript功能,此外还提供了Qt API和QCAD API的附加类。在一个独立的环境中运行QCAD可执行文件将不起任何作用,因为没有要执行的ECMAScripts。默认情况下,QCAD可执行文件通过查找一个名为“scripts/autostart.js”的文件开始执行。在QCAD中,自动启动脚本初始化了所有ECMAScript工具和用户界面组件并启动主应用程序循环。QCAD中当前可用的几乎所有小部件、菜单和工具都是在ECMAScript中实现的。这些脚本文件位于下载的QCAD软件包的“scripts”目录下。注意,在Mac OS X下,脚本目录位于“QCAD.app/ content/Resources/scripts”下的应用程序包中。


关于脚本的使用教程:https://www.qcad.org/en/tutorial-script-programming


7、QCAD的软件配置文件在:C:\Users\<用户名>\AppData\Roaming\QCAD\QCAD3.ini


8、如何在windows的dos环境下启动QCAD?


qcad.exe "C:\Users\firecat\Documents\dxf\555.dxf"

qcad.exe -exec scripts/File/OpenFile/OpenFile.js




9、依赖的Qt lib:


---Debug---


Qt5PrintSupportd.lib

Qt5Svgd.lib

Qt5OpenGLd.lib

Qt5Helpd.lib

Qt5UiToolsd.lib

Qt5Designerd.lib

Qt5Widgetsd.lib

Qt5Guid.lib

Qt5Scriptd.lib

Qt5ScriptToolsd.lib

Qt5Sqld.lib

Qt5XmlPatternsd.lib

Qt5Networkd.lib

Qt5Xmld.lib

Qt5Cored.lib

qtmaind.lib


---Release---

Qt5PrintSupport.lib

Qt5Svg.lib

Qt5OpenGL.lib

Qt5Help.lib

Qt5UiTools.lib

Qt5Designer.lib

Qt5Widgets.lib

Qt5Gui.lib

Qt5Script.lib

Qt5ScriptTools.lib

Qt5Sql.lib

Qt5XmlPatterns.lib

Qt5Network.lib

Qt5Xml.lib

Qt5Core.lib

qtmain.lib



---


相关学习资料:


https://www.cnblogs.com/opencascade/p/qcad.html


https://doc.qt.io/qt-5.12/qtscript-index.html Qt Script


https://doc.qt.io/qt-5.12/qscriptengine.html QScriptEngine


https://doc.qt.io/qt-5.12/qscriptenginedebugger.html Qt Script断点调试


ECMAScript


https://blog.csdn.net/tianyapai/article/category/8548350 QCad源码分析


https://blog.csdn.net/tianyapai/article/category/8500765 Qt Script翻译


QCAD与libreCAD的试用及比较,QCAD比libreCAD更好用,功能更强大


相关文章
|
2月前
|
C++
vtkdicom0.8_vtk9.2_dcmtk3.6.7_qt6.2编译OK
本文介绍了如何编译整合VTK 9.2、DICOM 0.8、DCMTK 3.6.7和Qt 6.2的步骤,包括安装Qt、CMake配置以及确认相关路径和版本设置。
vtkdicom0.8_vtk9.2_dcmtk3.6.7_qt6.2编译OK
|
2月前
|
Unix 网络虚拟化 C++
VS2022+Qt5.14.2成功编译MITK2022.10
使用VS2022和Qt5.14.2成功编译MITK2022.10的过程,包括编译结果的截图、遇到的编译问题的解决方法、两个重要的注意事项(patch文件格式的修改和ITK-gitclone-lastrun文件的存在),以及参考链接。文中详细描述了如何解决编译过程中遇到的错误C2220和警告C4819,以及如何修改文件编码和尾行格式。
126 1
VS2022+Qt5.14.2成功编译MITK2022.10
|
2月前
|
计算机视觉
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录
这篇文章记录了使用VS2019编译Qt6.2.4、DCMTK3.6.7、VTK9.2.2、ITK5.3和OpenCV4.6.0的过程,包括下载和编译步骤,并提供了遇到编译错误时的解决方案和参考链接。
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录
|
2月前
|
Windows
QT源码拾贝6-11(qwindowswindow)
这篇文章深入探讨了Qt源码中与窗口激活相关的函数,QDebug运算符重载,vscode的变量提示,Windows常用类型名,获取所有窗体的方法,以及QSharedPointer智能指针的使用。
QT源码拾贝6-11(qwindowswindow)
|
2月前
|
存储 Java C++
QT源码拾贝0-5(qimage和qpainter)
这篇文章介绍了在Qt源码中qimage和qpainter的使用,包括线程池的使用、智能指针的存储、std::exchange函数的应用、获取类对象的方法以及QChar字节操作。
QT源码拾贝0-5(qimage和qpainter)
|
2月前
|
C语言 C++ Windows
QT多插件通信框架CTK编译记录
本文记录了编译QT多插件通信框架CTK的过程,包括编译结果截图、部署配置、Log4Qt编译配置、参考链接和拓展资料。文中提供了详细的编译步骤和配置文件示例,以及相关的资源链接。
QT多插件通信框架CTK编译记录
|
2月前
|
机器学习/深度学习 Java 计算机视觉
opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录
本文记录了使用mingw81_64编译OpenCV 4.5.5、Qt 5.15.2、VTK 9.1的详细过程,包括编译结果截图、编译步骤、遇到的问题及其解决方案,以及相关参考链接。文中还提到了如何编译boost源码为静态库,并提供了测试代码示例。
opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录
|
4月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
178 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
3月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
87 0
|
2月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。

推荐镜像

更多