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

2021-08-11 03:30:52 字數 1759 閱讀 9055

由於qt可以開發自定義控制項,能夠設計出更漂亮的ui,所以打算學習開發自己的控制項,但學習過程中遇到很多問題,經歷了各種挫折終於了解了定義控制項的開發過程。

我的開發環境:qt-msvc2015-5.7.1(qt-msvc-32位,qt creator也是msvc-32位的)

一、新建qt4設計師自定義控制項工程

具體參考:

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 += pw

d/in

clud

elib

s+=

pwd/include/

*.lib(mingw編譯器為.a) ,這樣可以正常編譯,但是編譯完成後不能執行,還需要將對應自定義控制項的dll檔案複製到可執行檔案同一目錄即可,至此大功告成。

番外話:大部分文章介紹都是將對應的庫檔案和標頭檔案放到qt安裝目錄對應資料夾下,為什麼這裡要放到乙個include目錄,隨著專案一起呢?個人是這麼理解的,隨專案一起,每次都可以很方便的將執行庫檔案複製到可執行檔案同一目錄,而不會忘記從qt庫對應目錄找該執行庫。而且發布**的時候也可以有個很好的參考。

期間參考了以下部落格:

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

由於qt可以開發自定義控制項,能夠設計出更漂亮的ui,所以打算學習開發自己的控制項,但學習過程中遇到很多問題,經歷了各種挫折終於了解了定義控制項的開發過程。我的開發環境 qt msvc2015 5.7.1 qt msvc 32 位,qt creator 也是msvc 32 位的 一 新建qt4設計師...

開發自定義控制項

學習自定義控制項的開發不僅可以使你開發出更靈活的系統更重要的是它可以使你加深對已有伺服器控制項的理解,得以更靈活的應用。先說一下伺服器控制項的概念吧 所謂伺服器控制項,就是在伺服器上執行,並可以對映到所有瀏覽器支援的標準 html 標記的控制項,在你的web窗體中,凡是包含 runat server...

iOS基礎開發 自定義控制項

自定義控制項,設定子控制項的尺寸和位置 當系統提供的控制項滿足不了我們的需求,我們可以自定義乙個控制項,繼承系統自帶的控制項,寫乙個屬於自己的控制項.自定義控制項的好處是可以把封裝控制項內部的細節,不容易被外界隨意修改.如果乙個view內部的子控制項比較多,一般會考慮自定義乙個view,把它內部子控...