.ui→uic→ui_xxx.h 流程。QWidget/QSpinBox/QLabel)。HLed)、頭文件(如 hled.h)。QWidget 等)。生成的 .ui XML 記錄:<customwidget> 含類名與頭文件。uic 生成代碼時直接 new HLed 並 setupUi。
QDesignerCustomWidgetInterface 的插件類。name()、includeFile()、createWidget() 等虛函數。$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生成代碼邏輯相同,運行時行為相同。插件法只是將「類名+頭文件」從手動輸入變為插件元數據註冊,並提供設計時渲染與屬性編輯便利。