2025年1月6日 星期一

產生一個qt designer plugin的範例

以下是一個基本的 Qt Designer 插件範例,這個插件會創建一個簡單的 QRadioButton 控制項,並設置它的類名為 dvRadio

1. 建立 Plugin 項目

首先,確保你已經安裝了 Qt Designer 和 Qt 開發環境。接下來,我們將創建一個 Qt Designer 插件,這樣可以讓我們自訂 UI 控制項並將其加到 Qt Designer 中。

2. 插件的目標

我們將建立一個自定義的 dvRadio 插件,它基於 QRadioButton,並且當作一個自定義控件出現在 Qt Designer 中。

3. 構建 Plugin 項目的步驟

1. 創建新的 Qt 插件項目

在 Qt Creator 中

  • 打開 Qt Creator
  • 在主畫面選擇 "新建專案"
  • 在選擇專案類型的步驟中,選擇 "其他專案" 類型,然後選擇 "Qt Designer Plugin"
  • 這將創建一個包含必要文件和基礎結構的插件項目。

    2. 編寫 dvRadio

    在 Qt Designer 插件中,我們會創建一個自定義的 QRadioButton 類,並實現它的功能。

    dvRadio.h (自定義控件頭文件)
    #ifndef DVRADIO_H
    #define DVRADIO_H #include <QRadioButton> class dvRadio : public QRadioButton { Q_OBJECT public: dvRadio(QWidget *parent = nullptr); ~dvRadio(); protected: void paintEvent(QPaintEvent *event) override; }; #endif // DVRADIO_H
    dvRadio.cpp (自定義控件實現文件)
    #include "dvRadio.h"
    #include <QPainter> #include <QStyleOptionButton> dvRadio::dvRadio(QWidget *parent) : QRadioButton(parent) { setText("Custom Radio Button"); } dvRadio::~dvRadio() = default; void dvRadio::paintEvent(QPaintEvent *event) { QRadioButton::paintEvent(event); // 讓其繼承原來的繪製邏輯 // 在這裡可以添加自定義的繪製邏輯 }

    3. 實現 Plugin 介面

    接著,我們需要在插件中創建一個插件管理器,這樣我們的 dvRadio 控件才能夠在 Qt Designer 中顯示出來。

    dvRadioPlugin.h (插件頭文件)
    #ifndef DVRADIOPLUGIN_H
    #define DVRADIOPLUGIN_H #include <QDesignerCustomWidgetInterface> class dvRadioPlugin : public QObject, public QDesignerCustomWidgetInterface { Q_OBJECT Q_INTERFACES(QDesignerCustomWidgetInterface) public: dvRadioPlugin(QObject *parent = nullptr); QWidget *createWidget(QWidget *parent) override; QString name() const override; QString group() const override; QIcon icon() const override; QString toolTip() const override; QString whatsThis() const override; bool isContainer() const override; QWidget *createWidget(QWidget *parent) { return new dvRadio(parent); // 返回我們自定義的控件 } }; #endif // DVRADIOPLUGIN_H
    dvRadioPlugin.cpp (插件實現文件)
    #include "dvRadioPlugin.h"
    #include "dvRadio.h" #include <QtPlugin> #include <QIcon> dvRadioPlugin::dvRadioPlugin(QObject *parent) : QObject(parent) { } QString dvRadioPlugin::name() const { return "dvRadio"; // 控件的名稱 } QString dvRadioPlugin::group() const { return "Custom Widgets"; // 分類組別 } QIcon dvRadioPlugin::icon() const { return QIcon(); // 控件的圖標(可以自訂) } QString dvRadioPlugin::toolTip() const { return "A custom radio button widget"; // 顯示提示信息 } QString dvRadioPlugin::whatsThis() const { return "This is a custom radio button widget created for Qt Designer."; // 顯示更多說明 } bool dvRadioPlugin::isContainer() const { return false; // 這不是一個容器控件 } QWidget *dvRadioPlugin::createWidget(QWidget *parent) { return new dvRadio(parent); // 返回我們的自定義控件 } Q_EXPORT_PLUGIN2(dvRadioPlugin, dvRadioPlugin) // 這會導出插件

    4. 編寫 .pro 文件

    你需要設置 Qt 的 .pro 配置文件來指定插件的生成方式。這是一個簡單的 .pro 文件範例:

    QT += core gui designer
    TARGET = dvRadioPlugin TEMPLATE = lib HEADERS += dvRadio.h \ dvRadioPlugin.h SOURCES += dvRadio.cpp \ dvRadioPlugin.cpp # 插件支持 CONFIG += designerplugin # 如果有需要,也可以添加插件所需的資源 RESOURCES += resources.qrc

    5. 編譯插件

    使用 Qt Creator 編譯這個項目,將生成一個 .dll(Windows)或者 .so(Linux)文件,這就是你的 Qt Designer 插件。

    4. 安裝插件到 Qt Designer

    1. 將編譯後的插件文件(例如 dvRadioPlugin.dll)複製到 Qt Designer 的插件目錄中。
      • 通常這些插件目錄位於 Qt/5.x.x/msvc2019_64/plugins/designer/ 中。
    2. 重新啟動 Qt Designer,你應該能在 Designer 中看到新的控件 dvRadio

    5. 使用插件

    啟動 Qt Designer,並將 dvRadio 插件拖放到設計界面中,這樣就能使用你創建的自定義控件了。

    小結

    • 這個範例展示了如何創建一個自定義的 Qt Designer 插件,並將其添加到 Qt Designer 中。
    • 我們自定義了 dvRadio 類,這是一個簡單的 QRadioButton,並通過 QDesignerCustomWidgetInterface 插件接口讓其顯示在 Qt Designer 中。
    • 最後,編譯並安裝插件,並在 Qt Designer 中使用它。

    沒有留言:

    張貼留言