Qt添加自定義控件

前言

本文詳細介紹在Windows 10和Ubuntu 14.04系統下,使用Qt Creator 4.9.0創建自定義控件的過程,並在項目中使用

1 Windows

1.1 說明

Qt Creator中編譯項目使用的是MinGW/g++編譯器,而Qt提供的Qt Creator本身是由MSVC2017編譯的,所以Qt Creator中編譯的插件無法在Qt Creator中使用,下面是我安裝的Qt Creator
MinGW 64-bit
MSVC 2017, 32 bit
爲了在Qt Creator中使用自定義插件,有兩種方法,一種是也使用和Qt Creator版本相同的MSVC編譯器編譯插件,另一種就是使用MinGW重新編譯Qt Creator

我選擇安裝MSVC編譯器,需要下載安裝Visual Studio 2017

1.2 安裝MSVC

首先下載Visual Studio 2017,我下載的是社區版
Visual Studio 2017
下載好之後,按照提示安裝即可
MSVC安裝

1.3 安裝Qt Creator

把原來的Qt Creator卸載掉,重新下載安裝Qt Creator

安裝的時候,勾選紅框中的兩項,然後等待安裝完成
Qt Creator安裝

1.4 創建自定義控件

在Qt Creator點擊新建文件或項目,選擇Qt4 設計師自定義控件
Qt4 設計師自定義控件
之後輸入項目名稱,再點下一步,下一步
項目名稱
這裏需要選擇和Qt Creator編譯一致的編譯工具鏈,也就是前面安裝MSVC的原因
選擇編譯工具鏈
然後在控件類框裏輸入名字,並把所有首字母都換成大寫,注意首字母大寫,按照編碼規範命名,如果小寫後面會與實例對象的默認名稱出現衝突,會出現編譯錯誤
自定義控件列表
再下一步,下一步,直到完成
插件集合類的信息
最後創建項目目錄如下
項目目錄
把編譯版本改爲Release
編譯版本
然後右鍵項目,點擊清除,執行qmake,重新構建
重新構建
最後在你的編譯目錄下,會有dll文件和lib(MinGW編譯的是.a文件)
dll和lib
把dll和lib文件複製到Qt安裝目錄下的plugin/designer路徑下,比如我Qt Creator安裝是下面的路徑

F:\Qt5.12.3\Tools\QtCreator\bin\plugins\designer

文件複製
到這裏自定義控件創建完成

1.5 自定義控件使用

重新打開Qt Creator軟件,新建一個Qt Widgets Application項目,就能在設計UI界面看到新添加的自定義控件
自定義窗口部件
但是編譯的時候會報錯

Error: dependent 'SonicWidget.h' does not exist.

這個時候需要把下面這三個文件複製到你新建的項目目錄下

SonicWidget.cpp
SonicWidget.h
SonicWidget.pri

在新建的項目的.pro文件中添加下面代碼

include(SonicWidget.pri)

再編譯就沒有問題了

2 Ubuntu

在Qt Creator點擊新建文件或項目,選擇Qt4 設計師自定義控件
Qt4 設計師自定義控件
之後輸入項目名稱,再點下一步,下一步
項目名稱
然後在控件類框裏輸入名字,並把所有首字母都換成大寫
自定義控件列表
再下一步,下一步,直到完成
插件集合類的信息
最後創建的項目目錄如下
項目目錄
把編譯版本改爲Release
編譯版本
然後右鍵項目,點擊清除,執行qmake,重新構建
重新構建
最後在你的編譯目錄下,會找到一個so

/build-SonicWidget-Desktop_Qt_5_12_3_GCC_64bit-Release/libsonicwidgetplugin.so

把生成的so拷貝你的Qt Creator的這個目錄下,注意不同的Qt Creator版本,這個目錄可能不一樣,可以搜索designer文件夾

/opt/Qt5.12.3/Tools/QtCreator/lib/Qt/plugins/designer

重新打開Qt Creator軟件,新建一個Qt Widgets Application項目,就能在設計UI界面看到新添加的自定義控件
自定義窗口部件
但是編譯的時候會報錯

make: *** No rule to make target `SonicWidget.h', needed by `ui_mainwindow.h'.  Stop.

這個時候需要把下面這三個文件複製到你新建的項目目錄下

SonicWidget.cpp
SonicWidget.h
SonicWidget.pri

在新建的項目的.pro文件中添加下面代碼

include(SonicWidget.pri)

再編譯就沒有問題了

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