Qt5中創建及使用自定義插件遇到的一些問題


關鍵詞:Qt5、IconEditor、custom plugin、QtCreator、Failed Plugins、自定義插件

       今天,《C++ GUI Programming with Qt 4》看到了第五章自定義IconEditorPlugin的地方。動手嘗試過程中,遇到一些問題,記錄一下,借前輩之成果,示於后來者。

        開發環境:Win7 64 bit + Qt 5.1.0。

       由於書上是在Qt 4.x講的,而小伙伴們使用Qt 5.1.0有一段時間了。Qt 5 又不是完全兼容Qt 4.x(至於Qt 4.x -> Qt 5 需要注意的問題,參見:The Transition from Qt 4.x to Qt 5 或者Porting from Qt 4 to Qt 5),所以這次動手嘗試頗為不順,主要遇到兩個問題:

 

(1) Qt 5 中開發插件的方法和Qt 4.x有所不同

 

        詳情參考這里:Qt5:自定義窗口部件或這里Q_EXPORT_PLUGIN_2 breaks source compat 或者 How to Create Qt Plugins

        開發環境是Qt 5.x,而書籍是以Qt 4.x講的,的確讓剛接觸Qt的菜鳥(如我)不知所措。有點參考價值的隨書代碼,也可能不再適用。幸運的是,已經有小伙伴把這本書的隨書代碼從Qt 4.x移植到Qt 5中來了:Porting source code of the book C++ GUI Programming with Qt 4 from Qt4 to Qt5 。

        成功解決Qt版本差異帶來的問題后,興沖沖地編譯、鏈接、生成dll文件,但是這個dll該怎么用呢?怎么能夠在Qt Designer中像使用內置組件一樣使用這個自定義組件呢?這就是下一個問題了。

 

(2) 在Windows中QtCreator無法識別自定義插件


        生成dll后,我把它放置到D:\Qt\Qt5.1.0\5.1.0\msvc2012_64_opengl\plugins\designer下,打開D:\Qt\Qt5.1.0\5.1.0\msvc2012_64_opengl\bin\designer.exe,在左側的組件欄里找到了IconEditor。撥弄個窗體,拖一個IconEditor,完美!

        接下來,為了了解這個IconEditor和上面自定義的IconEditor類是怎么協同工作的,我打開QtCreator,建立了一個完整的應用程序。這個程序帶一個對話框,在QtCreator中打開ui文件,可是發現左側組件欄里沒有我要的IconEditor組件。

        單獨打開QtDesigner可以看到,但是在QtCreator中集成的designer界面中卻沒有IconEditor,怎么回事呢?

        我想,會不會是QtCreator查找插件的路徑和QtDesigner不一樣,於是便在Qt安裝目錄中閑逛。別說,還真讓我發現了一個地方:D:\Qt\Qt5.1.0\Tools\QtCreator\bin\plugins\designer。在這個文件夾下,已經有幾個插件,和D:\Qt\Qt5.1.0\5.1.0\msvc2012_64_opengl\plugins\designer目錄下的一模一樣。難道我創建的自定義插件也要往這里復制一份嗎?

        說干就干,復制完后,重啟QtCreator,打開UI設計界面。暈,還沒有。難道是QtCreator加載自定義插件需要額外的操作?網上搜索, 找到了QtCreator檢測插件是否加載成功的方法:

        在QtCreator中打開項目的界面文件(*.ui),此時QtCreator允許你使用集成的QtDesigner來編輯這個ui文件,然后打開菜單項“工具->界面編輯器->About Qt Designer plugins...”即可查看哪些插件加載成功了,哪些未加載成功(在單獨運行的QtDesigner中,打開“幫助->關於插件”菜單也可查看插件加載成功與否)。

        我發現在QtCreator中,自己定義的IconEditor未加載成功(在單獨打開的QtDesigner中,加載沒有問題):

 

 

        這張圖片表示QtCreator找到了插件,但是未成功加載(注意:要讓QtCreator找到自定義的插件,必須把它復制到Qt\Qt5.1.0\Tools\QtCreator\bin\plugins\designer目錄下,在Qt\Qt5.1.0\5.1.0\msvc2012_64_opengl\plugins\designer目錄下的只能讓單獨運行的QtDesigner加載)。

        找到一條信息:QTCreator's integrated form editor won't load custom widget plugins (Designer does) 。雖然這個問題對我幫助不大,但鑒於這個問題描述的現象和自己的問題極為貼近,便記錄下來。繼續搜索!

        (此處省略9999字,不過搜索真相的過程是”艱辛“的……)

        最后找到的幾篇完美解決問題:

        在QtCreator中使用自定義控件及在vs2010中集成

        QT (win32) Cannot use custom widgets build by itself

        QT自定義控件整合

 

后記:

        其實本來想寫的比這要長得多(想把參考過的內容整合總結一下)。無奈本性懶散,又加上眼睛不適,便省卻遣詞造句、謀篇布局之繁瑣,僅僅把比較有價值的參考鏈接列在文中,靠諸君自己點擊閱讀了。

 

2014-01-25

多謝CSDN網友cicada_xb的補充


原因在於:獨立的qt creator是用msvc庫編譯的,qt designer是基於mingw編譯的.所以只要帶了qt包的插件都裝不上

http://doc.qt.digia.com/qtcreator-2.4/adding-plugins.html
http://blog.csdn.net/yangxiao_0203/article/details/6896707
http://www.qtcentre.org/threads/30410-compile-plugin-with-msvc

https://code.google.com/p/qt-msvc-installer/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM