首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Qt Designer 自定義控件集成:提升法 vs 插件法深度對比

     編輯:關於C語言

Qt 開發者的三階段演變

  1. 初學:拖拽佈局,覺得超方便。
  2. 進階:覺得 Designer 累贅,代碼控制更靈活,不想用 .ui→uic→ui_xxx.h 流程。
  3. 成熟:發現 Designer 結合提升法極其高效,自定義控件無痛集成,前期痛點皆可解決。

自定義控件在 Designer 中的兩條路徑

提升法 - 輕量、零依賴

  1. 拖放基類控件(如 QWidget/QSpinBox/QLabel)。
  2. 右鍵 → 提升為...(Promote to...)
  3. 填寫:提升的類名(如 HLed)、頭文件(如 hled.h)。
  4. 基類下拉框選擇原控件類(QWidget 等)。

生成的 .ui XML 記錄:<customwidget> 含類名與頭文件。uic 生成代碼時直接 new HLed 並 setupUi。

插件法 - 所見即所得、屬性編輯器集成

  1. 編寫繼承 QDesignerCustomWidgetInterface 的插件類。
  2. 實現 name()、includeFile()、createWidget() 等虛函數。
  3. 編譯為動態庫,放入 Qt Designer 插件目錄($QT_DIR/plugins/designer)。

優勢:

  • 組件箱直接顯示自定義控件圖標。
  • 拖放即見真實渲染(createWidget 返回實例)。
  • 屬性編輯器自動識別 Q_PROPERTY,支援可視化編輯。

本質對比:插件法只是「設計時」的增強

維度提升法插件法
設計時外觀基類替身(如 QWidget 空白框)真實控件渲染
屬性編輯手動添加動態屬性(+號)自動識別 Q_PROPERTY
編譯產物無額外產物需編譯/部署插件 DLL
運行時行為完全一致(均生成 new CustomWidget)完全一致
適用場景快速開發、團隊無插件部署能力大型組件庫、需求可視化屬性編輯

進階技巧:替身不等於真身

需求:HDoubleSpinBox 繼承 QStackedWidget,但設計時想看 QDoubleSpinBox;HLabelButton 繼承 QLabel,設計時想看 QToolButton。

  • 提升法:提升對話框中「基類」下拉框直接選 QDoubleSpinBox/QToolButton 即可,替身隨意換。
  • 插件法:createWidget() 返回 new QDoubleSpinBox 而非 new HDoubleSpinBox。

兩種方法均能實現「設計時替身 ≠ 運行時真身」。

核心結論

插件法與提升法在本質上無區別。二者產出的 .ui 文件結構相同,uic 生成代碼邏輯相同,運行時行為相同。插件法只是將「類名+頭文件」從手動輸入變為插件元數據註冊,並提供設計時渲染與屬性編輯便利。

建議選型

  • 中小專案、個人/小團隊 → 提升法:零配置、版本控制友好、即寫即用。
  • 大型組件庫、跨專案複用、非開發人員參與 UI 設計 → 插件法:一次部署,處處可視化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved