二十一 Qt之自定義 Qt Designer 外掛程式

2021-10-02 17:01:12 字數 4251 閱讀 9022

單擊 qt creator 的 「幫助」–>「關於 qt creator」選單,出現的對話方塊會顯示 qt creator 的版本資訊和使用的編譯器資訊。qt5.9的 qt creator 是基於 msvc2015 32bit 編譯器編譯的。

參見 qt5 + msvc2015編譯器 環境配置 (不安裝vs)

本案例名稱為 qwbattery

唯一需要注意的就是:

一般用預設生成的即可。

qwbattery.h

#ifndef qwbattery_h

#define qwbattery_h

#include

#include

#include

#include

#include

/** * @brief qdesigner_widget_export 巨集:用於將自定義元件類從外掛程式匯出給 qt designer 使用,

* 必須在類名稱前使用此巨集

*/class

qdesigner_widget_export qwbattery :

public qwidget

;#endif

qwbattery.cpp

#include

"qwbattery.h"

qwbattery::

qwbattery

(qwidget *parent)

:qwidget

(parent)

void qwbattery::

setpowerlevel

(int pow)

int qwbattery::

getpowerlevel()

void qwbattery::

setwarnlevel

(int warn)

int qwbattery::

getwarnlevel()

qsize qwbattery::

sizehint()

void qwbattery::

paintevent

(qpaintevent *event)

else

painter.

setbrush

(brush)

; painter.

setpen

(pen);if

(powerlevel >0)

qfontmetrics textsize

(this

->

font()

);qstring powerstr = qstring::

asprintf

("%d%%"

, powerlevel)

; qrect textrect = textsize.

boundingrect

(powerstr)

; painter.

setfont

(this

->

font()

);pen.

setcolor

(colorborder)

; painter.

setpen

(pen)

; painter.

drawtext(55

- textrect.

width()

/2,23

+ textrect.

height()

/2, powerstr)

;}

外掛程式在 release 模式下編譯,生成檔案:qwbatteryplugin.dll 和 qwbatteryplugin.lib,外掛程式在 debug 模式下編譯,生成檔案:qwbatteryplugind.dll 和 qwbatteryplugind.lib,兩個的區別就是 debug 編譯生成的檔名末尾多乙個 「d」 字母。將 qwbatteryplugin.dll 和 qwbatteryplugind.dll 動態鏈結庫檔案複製到下面兩個目錄:

d:\qt\qt5.9.0\tools\qtcreator\bin\plugins\designer

d:\qt\qt5.9.0\5.9\msvc2015\plugins\designer

重啟 qt creator,使用 ui 設計器設計視窗時,在左側的元件面板會看到增加乙個 my widget 分組,分組裡面有乙個元件 qwbattery:

1、新建乙個專案 batteryuser,設計介面如下:

編輯 滑塊控制項和電池控制項的槽函式:

void mywidget::

on_qwbattery_powerlevelchanged

(int arg1)

void mywidget::

on_horizontalslider_valuechanged

(int value)

2、在專案的源檔案目錄下建立乙個 include 子目錄,將 qwbattery 類定義的標頭檔案 qwbattery.h 、外掛程式的 debug 和 release 兩種模式編譯生成的庫檔案 qwbatteryplugind.lib 和 qwbatteryplugin.lib 複製到此目錄下,專案在編譯鏈結時需要此標頭檔案和庫檔案。

3、導入庫檔案

方式一:引導方式

右擊專案,在彈出的選單中選擇 「新增庫…」 ,選擇庫型別時,選擇 外部庫「external library」;選擇庫檔案位置時,就把 include 資料夾下的 qwbatteryplugin.lib 選中即可,會自動填充 「include path」編輯框,選擇 windows 平台,連線方式選擇 dynamic ,勾選下方 add 「d」 suffix for debug version,表示在 debug 版本的庫名稱後面新增乙個字母 「d」,以便編譯器自動區分 release 和 debug 版本的庫檔案。

方式二:手動**匯入

修改專案檔案 batteryuser.pro,新增:

#設定新增的庫檔案,會判斷當前專案時以 debug 還是 release 模式編譯

win32:

config

(release, debug|release)

: libs +

=-l$$pwd/include/

-lqwbatteryplugin

else

:win32:

config

(debug, debug|release)

: libs +

=-l$$pwd/include/

-lqwbatteryplugind

#頭檔案目錄

includepath +

= $$pwd/include

#專案依賴目錄

dependpath +

= $$pwd/include

4、執行專案

此時可正常編譯,但是無法正常執行,一旦執行,會直接崩潰,且無報錯資訊。

(1)第一步:編譯

在 debug 和 release 兩種模式下分別編譯。

(2)第二步:複製外掛程式的 dll 檔案

將外掛程式在 debug 和 release 兩種模式下編譯生成的 qwbatteryplugin.dll 和 qwbatteryplugind.dll 動態鏈結庫檔案分別複製到專案編譯的兩個資料夾下:

e:\qt_demo\build-batteryuser-desktop_qt_5_9_0_msvc2015_32bit-debug\debug

e:\qt_demo\build-batteryuser-desktop_qt_5_9_0_msvc2015_32bit-release\release

(3)第三步:執行

二十三、qt5.9 + msvc2015編譯器 環境配置 (不安裝vs)

二十四、qt lnk1158 無法執行rc.exe 解決方法

二十六、qt之使用 msvc編譯器輸出中文亂碼的問題

(二十一)自定義Tabbar

1.隨便找乙個目錄 比如component 2.在component裡建立乙個資料夾 我們用的是官方的 把 複製到我們新建的tabbar中 包括js,wxml,json,wxss 現在tabbar就沒有了 現在我們要是在那個頁面用 就在那個頁面社會 比如 index頁面 tabbar的顏色自己定義就...

Qt之自定義QEvent

2 如何定義個事件型別。qt中提供了 static int qevent registereventtype int hint 1 用來定義程式中唯一的事件型別。4 postevent和sendevent的區別 1 sendevent使用notify 函式直接給receiver傳送事件。不支援多執行...

Qt練習之自定義時鐘

在qtproject中自學qt時,上面有乙個例項是編寫時鐘的,其中用到了qtimer,訊號和槽以及事件的知識,是練習qt的好例子,本人在例項上新增了秒鐘的設定,從而更加像乙個使用的時鐘錶了,下面展示一下執行結果。下面我來和大家分享一下,具體實現,類analogclock是自定義類,它繼承於qwidg...