添加 Qt 模塊 QtCanvas3D
由於需要使用 Qt Quick 進行 3D 繪圖,因此在網上找了一些資料。
JS 繪制 3D 的有 ThreeJS 庫,應該可以用於 QML。繼續搜索,發現Qt 里面有一個 QtCanvas3D 模塊,可以用來進行 3D繪制。那就照着 Qt 官方教程做,首先導入該模塊
import QtCanvas3D 1.1
但是問題來了,QtCreator 提示 “QML Module not found”,原來是電腦上沒有這個模塊,那就安裝這個模塊吧。找了一圈,沒有找到比較好的安裝模塊的方法,最后找到了 GitHub 上的 qtcanvas3d 源碼地址
下載下來自己編譯應該沒什么問題。接下來談談安裝模塊的經歷。
1. 下載相應版本的 qtcanvas3d ,我用的 Qt 版本是 5.6,下載后解壓得到 qtcanvas3d-5.6 文件夾。
為了方便,我把它放到了 <QT Install Dir>/5.6 目錄下(這里存放的是編譯器相應配置和庫的文件夾)。
2. 打開 qtcanvas3d-5.6/src/imports/qtcanvas3d 目錄,直接用 QtCreator 打開 qtcanvas3d.pro ,得到一個 qtcanvas3d 工程
打開這個項目的屬性,把構建設置的 Shadow Build 取消掉(當然也可以指定目標位置,但是我指定后沒有編譯出相應的 dll 文件)
構建,就能在 <Qt Install Dir>/5.6/qtcanvas3d-5.6/ 目錄下得到新目錄 qml,里面存放的文件夾 QtCanvas3D 就是編譯得到的庫文件。
上圖就是我用 msvc 編譯器編譯得到的庫文件,但是把 QtCanvas3D 整個文件夾復制到 <Qt Install Dir>/5.6/msvc20xx_64/qml 目錄下,在 QtCreator 里面還是會顯示找不到 QtCanvas3D 模塊。
3. 參考官方文檔 QML Modules ,這里說明了要想添加插件,還需要兩個文件 qmldir 和 plugins.qmltypes 。這兩個文件在源代碼中就有(上圖中的 qtcanvas3d 項目中的兩個文件就是我們需要的文件),
復制到相應的目錄,重新打開 QtCreator,再看項目,發現 “Module not found” 提示已經消失。成功導入模塊!
-----------------------------------------------
在添加 qtcanvas3d 庫時,犯了一個很蠢的錯誤。
我先用 MinGW 32 編譯出了庫文件,然后把庫文件復制到 <Qt Install Dir>/5.6/mingwxx_xx/qml 目錄下,但是把 qmldir 和 plugins.qmltypes 復制相應位置,還是提示我沒有找到模塊。
最后發現,我的項目是用的 msvc 編譯器,查找插件是到 msvc 相應目錄查找,難怪我怎么修改都沒有辦法把插件添加進去。最后重新用 msvc 編譯 QtCanvas3D ,放到 msvc 編譯器的插件目錄下面,就好了。
根據論壇里的答復,也可以自定義插件路徑,要在構建環境里添加一個 QML2_IMPORT_PATH 變量,指向相應目錄,試過這個辦法,但是沒什么用。