Qt5開發自定義控件中遇到的問題

由於Qt可以開發自定義控件,能夠設計出更漂亮的UI,所以打算學習開發自己的控件,但學習過程中遇到很多問題,經歷了各種挫折終於瞭解了定義控件的開發過程。
我的開發環境:qt-msvc2015-5.7.1(Qt-MSVC-32位,Qt Creator也是MSVC-32位的)
一、新建Qt4設計師自定義控件工程

具體參考:http://www.2cto.com/kf/201607/527857.html
http://blog.csdn.net/giselite/article/details/12622429
2.編譯調試
首先執行qmake,然後在release模式下編譯,編譯完成後默認會在release文件夾下會生成一個.dll和.lib文件。
3.使用測試
分別將生成的.dll文件複製到D:\Qt\Qt5.7.1\5.7\msvc2015\plugins\designer和D:\Qt\Qt5.7.1\Tools\QtCreator\bin\plugins\designer目錄下以保證在designer和qtcreator都能顯示自定義的控件。生成自定義控件使用的是QT5.7.1 for VS2015,使用自定義控件項目使用的是QT5.7.1 for MinGW或者 for VS2015。這個兩個都測試過。都可以使用。並且看到自定義屬性。
開發過程中主要遇到的問題:
qtcreator創建的自定義控件使用mingw(qt-mingw530-5.7.1)編譯後能在designer中顯示但在qtcreator中加載失敗。
解決辦法:
(1)官網提供的Qt Creator版本基本上是MSVC版本,如果需要在mingw的Qt庫對應的Qt Creator中集成自定義控件,需要自己用對應的Qt庫編譯Qt Creator源碼。
(2)由於QtCreator是基於MSVC編譯,所以需要將工程在MSVC上編譯。所以在MSVC2015的Qt庫的qtcreator中用MSVC2015進行編譯。
Qt自定義插件注意事項:

1:每個Qt庫bin目錄的designer可執行文件都是和該庫同一個編譯器編譯的,可用,如果想要集成到Qt Creator中,則需要注意版本,一般在windows上的Qt Creator版本是MSVC的,則需要對應的Qt庫也是MSVC編譯的,庫版本和編譯器版本必須保持一致才能是順利集成到Qt Creator的重要前提。

2:自定義控件的名稱不能小寫,否則拖過去的控件自動生成的默認名稱和類名一樣,會編譯通不過。這個問題坑了我很久,造成自動生成的UI代碼保存,一直沒有懷疑,後面才發現自動生成的代碼類名和實例名稱一樣,衝突導致的。

3:如果將生成好的dll文件放到Qt庫目錄下的 plugins\designer 下,可以在 designer 中看到。放到Qt Creator下的 bin\plugins\designer 則可以集成到Qt Creator中。

4:將自定義控件的頭文件、dll文件、lib(mingw編譯器爲.a)文件複製出來,放到include(可自己隨便命名,我這裏習慣用include)目錄,將include目錄放到項目的源碼文件下,在使用了自定義控件的項目的pro文件中。增加兩行 INCLUDEPATH +=

PWD/includeLIBS+=
PWD/include/*.lib(mingw編譯器爲.a) ,這樣可以正常編譯,但是編譯完成後不能運行,還需要將對應自定義控件的dll文件複製到可執行文件同一目錄即可,至此大功告成。

番外話:大部分文章介紹都是將對應的庫文件和頭文件放到Qt安裝目錄對應文件夾下,爲什麼這裏要放到一個include目錄,隨着項目一起呢?個人是這麼理解的,隨項目一起,每次都可以很方便的將運行庫文件複製到可執行文件同一目錄,而不會忘記從Qt庫對應目錄找該運行庫。而且發佈代碼的時候也可以有個很好的參考。

期間參考了以下博客:
http://www.cnblogs.com/feiyangqingyun/p/6182320.html
http://blog.csdn.net/ubiter/article/details/12757817
http://blog.csdn.net/zhuxiaowei716/article/details/26063797

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章