Qt Designer 基于插件的架构使得它可以使用用户设计或者第三方提供的自定义部件,就像使用标准的 Qt 部件一样。自定义部件中的所有特性在 Qt Designer 中都是可用的,这包含了部件属性、信号和槽等。

  1. 创建项目。新建项目,模板选择 “Other Project” 分类中的 “Qt Custom Designer Widget”,项目名称定位 mydesigner,控件类改为 MyDesign,然后在右侧指定图标文件的路径(不指定的话使用 Qt 默认图标),其他选项保持默认。后面步骤全部保持默认直到完成项目的创建。

    注意,在创建项目,选择编译 kit 时,选择 64位 msvc2019(我的 Qt Creator 是64位msvc2019编译的),因为后面生成的 dll 文件与编译套件相关,生成的 dll 文件版本如果与 Qt Creator、designer 不匹配,则部件无法加入。

    image-20211112154912482

  2. 更改部件。可以通过修改 mydesign.h 和 mydesign.cpp(注意,在 mydesign 工程列表下的 mydesign 目录下,如下图),修改部件。

    image-20211112154244020

    进入 mydesign.cpp 文件修改:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include "mydesign.h"
    #include <QPushButton>
    #include <QHBoxLayout>

    MyDesign::MyDesign(QWidget *parent) :
    QWidget(parent)
    {
    QPushButton *button1 = new QPushButton(this);
    QPushButton *button2 = new QPushButton(this);
    button1->setText("hello");
    button2->setText("Qt!");
    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(button1);
    layout->addWidget(button2);
    setLayout(layout);
    }

    这里需要在 Qt Creator 左下角的目标选择器中将构建选项选择为 Release,因为只有 Release 版本的插件在 Qt Designer 中才可以使用。构建完成后 release 目录中已经生成了相应的 dll 文件。

  3. 在 Qt Designer 中使用插件。为了使 Qt Designer 可以自动检测到插件,需要将生成的 dll 文件复制到 Qt 安装目录的 plugins 目录下的 designer 目录中。我的路径为 D:\APPS\Qt\5.15.2\msvc2019_64\plugins\designer。这时在 D:\APPS\Qt\5.15.2\msvc2019_64\bin 目录下点击运行 desinger,可以发现底部已经有自定义的部件了,可以使用。

    现在只能在 Qt Designer 中使用,却不能在 Qt Creator 的设计模式中使用,Adding Qt Desinger Plugins 关键字对应的文档中提到了这一点。这是因为现在使用的 Windows 版本的 Qt Creator 是使用 Microsoft Visual Studio 的编译器生成的,而在 Qt Creator 中编译项目使用的是 MinGW/g++ 编译器,它们的 Build Keys(包含了体系结构、操作系统、编译器等信息,具体可以参见 Deploying Plugins 关键字)不同,所以生成的插件无法在 Qt Creator 中使用。

    如果安装了 MSVC 版本的 Qt,则使用该版本编译插件时将生成的 dll 文件复制到 Qt Creator 安装目录中。重新启动 Qt Creator,在设计模式就可以看到自定义部件了。