qt自定义插件creator不显示_让Qt Creator更懂我们的自定义模块
用QML模塊的方式組織軟件是個不錯的結構設計,筆者的QtQuick項目都會首先考慮QML模塊的劃分,然后以搭積木的方式完成最后的開發。
Qt Creator是開發QtQuick程序的首先IDE,因為它提供了很方便的代碼提示和JS調試。但是筆者發現,項目中經常有成員抱怨自定義模塊沒有代碼提示。這雖然不影響功能,但是卻影響開發效率和開發體驗。專為QtQuick開發的IDE居然對我們的QML模塊一無所知,這沒法忍。
這篇文章筆者將圍繞這個問題,首先介紹Qt Creator是如何做到QML代碼提示的,然后再講如何讓我們的自定義模塊也能夠支持代碼提示。
回顧何為QML模塊
QML模塊是QML庫的基本單元。具體的定義這里不贅述了,只挑幾個要點回顧一下:要成為QML模塊,必不可少的是兩個條件:和模塊名一致的文件夾名;
該文件夾下有一個qmldir文件,定義該QML模塊的模塊名(和文件夾名一致)以及其他的類型、資源。
可以有一個或多個C++編譯而成的插件(一般就是一個插件,多了會影響性能);
可以有QML文件和JS文件。
上述都是影響QML模塊功能的地方。之前我們開發QML模塊時的注意力也在這些地方。但是Qt Creator的代碼提示卻不靠這個。
qmltypes文件
Qt Creator的代碼提示靠的是后綴為qmltypes的文件。大家可以去Qt自帶的QML模塊看下,每個模塊內都有一個qmltypes文件。當我們在QML代碼中寫下import XXX時,Qt Creator就會去找XXX模塊文件夾下的qmltypes文件,然后解析,最后提供代碼提示。
要想為我們自定義QML模塊提供代碼提示,關鍵是生成這個文件。
這個文件就是個文本文件,你可以打開查看。其實理論上你可以根據語法規則手寫這個文件,但顯然不是很好的做法。
具體方法
Qt其實自帶了一個工具,位于bin目錄里的qmlplugindump,是個命令行工具,可以用來生成qmltypes文件。假設模塊名叫MyModule,具體過程如下:
1. 正常開發QML模塊,編譯好后使用windeployqt(MacOS上是macdeployqt)解決依賴。這個deploy工具如何使用請參看本專欄之前的一篇文章:陳錦明:使用CMake自動部署Qt Quick程序?zhuanlan.zhihu.com
2. 確保編譯生成的dll和qmldir等放在MyModule文件夾內,而MyModule文件夾和第1步部署后的其他QML模塊同一層級,假設都位于c:/deploy。
3. 調用qmlplugindump,基本用法是:qmlplugindump MyModule 1.0 c:/deploy -nonrelocatable -output mymodule.qmltypes,這樣就會生成mymodule.qmltypes文件。將其考到MyModule文件夾內即可。同時修改qmldir文件,加上:
typeinfo mymodule.qmltypes
此時我們的MyModule模塊就完成了。
4. 在主界面工程中,如果是CMake工程,要在CMakeLists.txt中設置QML_IMPORT_PATH這個變量,而且要確保其寫入到CMake Cache中,一般的寫法是:
set(QML_IMPORT_PATH ${CMAKE_CURRENT_BINARY_DIR} CACHE STRING "qml import path"
其中,${CMAKE_CURRENT_BINARY_DIR} 是你放置MyModule模塊的所在目錄,你也可以放在別的地方。
5. 在主界面QML代碼中,import MyModule 1.0之后,Qt Creator就能夠自動加載對應的qmltypes文件了。
注意事項
筆者在實踐中發現幾個要注意的地方,列在下面和大家分享:要使Qt Creator正確加載qmltypes文件,請確保QML_IMPORT_PATH設置正確。如果是CMake工程,請確保它寫入了CMakeCache.txt文件中。如果沒有,可以清楚CMake配置,重新CMake;
Qt的bin目錄中自帶的是Release版的qmlplugindump,它只能正確處理我們Release版的插件編譯結果,對于Debug版的是會報錯的。解決辦法有兩個:只在Release時生成。其實qmltypes文件是一樣的,Debug和Release可以復用;
自己去Qt源碼中找到qmlplugindump的源碼,然后編一個Debug版的。
可以使用CMake的add_custom_command命令將qmlplugindump的執行腳本化,這樣可以讓CMake每次編譯時自動幫我們生成(或者更新)qmltypes文件。
總結
以上是生活随笔為你收集整理的qt自定义插件creator不显示_让Qt Creator更懂我们的自定义模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: espflashdownloadtool
- 下一篇: java激励_激励---201218(激