当我们使用QT设计师自定义控件生成库文件后,在其他工程需要使用该自定义控件时,可通过生成的库文件与该自定义控件类对应的.h头文件配合使用。

 

参考

1. https://blog.csdn.net/wushuang443/article/details/105099022/

 2. Qt编写自定义控件及插件的使用 - 平台梦 (pingtaimeng.com)

 

Qt自定义插件注意事项:

1:每个Qt库bin目录的designer可执行文件都是和该库同一个编译器编译的,可用,如果想要集成到Qt Creator中,则需要注意版本,一般在windows上的Qt Creator版本是MSVC的,则需要对应的Qt库也是MSVC编译的,库版本和编译器版本必须保持一致才能是顺利集成到Qt Creator的重要前提。

2:使用不同的Qt Creator版本编译的插件,即使在相同Qt Designer版本下也是看不见的,可以使用当前使用的Qt Creator重新编译插件或者使用与原插件相同的Qt Creator版本

3:自定义控件的名称不能小写,否则拖过去的控件自动生成的默认名称和类名一样,会编译通不过。这个问题坑了我很久,造成自动生成的UI代码保存,一直没有怀疑,后面才发现自动生成的代码类名和实例名称一样,冲突导致的。

4:自定义控件类头文件引入,Qt5.7以下版本为#include <QtDesigner/QDesignerExportWidget> 以上版本为#include <QtUiPlugin/QDesignerExportWidget>

5:类名前必须加入 QDESIGNER_WIDGET_EXPORT 宏。否则集成到Qt Creator 中编译会报错。不加的话可以在设计器中加载,但是编译会报错。

6:如果将生成好的dll文件放到Qt库目录下的 plugins\designer 下,可以在 designer 中看到。放到Qt Creator下的 bin\plugins\designer 则可以集成到Qt Creator中。

7:将自定义控件的头文件、dll文件、lib(mingw编译器为.a)文件复制出来,放到include(可自己随便命名,我这里习惯用include)目录,将include目录放到项目的源码文件下,在使用了自定义控件的项目的pro文件中,增加两行 INCLUDEPATH += $$PWD/include   LIBS += $$PWD/include/***.lib(mingw编译器为.a) ,这样可以正常编译,但是编译完成后不能运行,还需要将 对应自定义控件的dll文件复制到可执行文件同一目录即可,至此大功告成。

番外话. 大部分文章介绍都是将对应的库文件和头文件放到Qt安装目录对应文件夹下,为什么这里要放到一个include目录,随着项目一起呢?个人是这么理解的,随项目一起,每次都可以很方便的将运行库文件复制到可执行文件同一目录,而不会忘记从Qt库对应目录找该运行库。而且发布代码的时候也可以有个很好的参考。

特别注意:(血的教训)

在包含头文件时一定不能重复,平时在使用非设计师自定义插件时,一般可以通过Qt提供的“添加现有文件”选项直接在工程中添加头文件就可以直接编译,而在使用设计师自定义插件,通过ui界面将插件拖入到窗体中时,Qt根据UI文件生成代码时,会需要在项目的路径中找该插件的头文件,此时如果我们不是将插件的头文件放入项目根目录,而是如注意事项7中描述的,将头文件放入了一个子目录(比如:include文件夹)中,而此时如果直接编译,Qt会报错说找不到头文件,此时如果你将另一个头文件拷贝到项目根目录下,确实能解决这个报错,但是编译时会报“C2491: “XXX::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义”错误和“warning C4273: “staticMetaObject”: dll 链接不一致”报警,这个原因就是头文件重复包含,在include目录下已经有一个头文件,在根目录一下又有一个,解决这种问题2种方法:

1. 直接将头文件放在根目录下

2. 在.pro文件种包含头文件所在目录

 

 

 

8:官网提供的Qt Creator版本基本上是MSVC版本,如果需要在mingw的Qt库对应的Qt Creator中集成自定义控件,需要自己用对应的Qt库编译Qt Creator源码。

 

 

以下是Windows下的Qt使用教程

使用思路:

Step 1. 将插件继承到Qt Creator中:

为了方便自定义插件的使用,可以通过在Qt Creator中在UI设计界面可以通过拖拽的方式进行配置,使用与当前使用的Qt Creator同版本的编译器对自定义插件进行重新编译(Windows版本的Qt Creator一般是MSVC编译的),将编译生成的xxx.lib(非必须)和xxx.dll拷贝至Qt\Tools\QtCreator\bin\plugins\designer

1. 打开Qt Creator,找到Qt Creator的编译器版本

 

 2. 打开自定义插件源码,使用刚刚获取的Qt Creator的编译器版本MSVC 2019 64位编译器对自定义插件源码进行编译

 

 3. 编译生成xxx.lib(非必须)和xxx.dll文件,将生成的文件拷贝至Qt工具Qt Creator的插件目录下 Qt\Tools\QtCreator\bin\plugins\designer

 

 4. 完成以上步骤后,打开Qt Creator,创建工程后即可在UI设计界面看到自定义插件,并且可以进行拖拽

 

 

 

Step 2. 将对应编译器版本生成的库文件xxx.lib(MINGW为xxx.a) 和xxx.dll以及相关的.h头文件拷贝到需要使用该控件库的工程下,将库文件作为外部库进行导入到工程中,并将头文件也一并导入

例如,有1个工程需要使用自定义控件库,该工程希望使用编译器版本为Qt 5.15.2 MinGW 32bit, 那么将使用Qt 5.15.2 MinGW 32bit编译器编译的xxx.a和xxx.dll动态库(如果没有该版本对应的动态库,可使用源码进行编译)拷贝至该工程目录下

1. 将对应编译器版本的动态库拷贝至工程目录下

 

 2. 将头文件拷贝至工程目录下,此例中在工程目录下另建了1个Include目录用于放置类库的头文件

 

 3. 将头文件导入工程,使用导入现有文件夹的形式将整个包含类库的头文件导入,也可以单独导入需要使用的类库的头文件

 

4. 导入头文件后,在工程的.pro文件中将自动生成以下内容

 

 5. 使用导入外部库的方式导入类库

 

 

 

 

 

 

 

 6. 完成以上操作后,在.pro文件中自动添加了相关内容

 

 7. 所有准备工作完成,可以进行编译

 

 

 

 

 以下是Linux版本的使用教程 

1. 将生成的库文件拷贝至QT安装目录的Qt Designer相应的库文件目录下,

Linux版本:将xxx.so库文件拷贝至Qt/Tools/QtCreator/lib/qtcreator/plugins,Qt/Tools/QtCreator/lib/Qt/plugins/designer,Qt/5.15.2/gcc_64/plugins/designer(此处5.15.2/gcc_64为相应的编译器版本,可能使用库文件需要使用相同的编译器,还未尝试)

 

 

 

2. 打开需要使用该自定义控件的工程,将库文件拷贝至该工程目录下

 

3. 打开该工程,打开工程后,右键该工程,选择“添加库”

 

4. 选择“外部库”,点击下一步

 

5. 在库文件所在的目录中找到该库文件,此前我们已经将库文件拷贝至本工程目录下,因此我们选择本工程的目录的库文件,点击下一步

 

                               

 

6. 此时QT会在我们的工程的.pro文件中自动添加库文件包含路径以及相应的配置,点击完成

7. 此时我们已经可以使用该自定义控件库了,用QT designer打开该工程的.ui文件,

 

 

8. 在QT Designer中我们看到在控件库多了一个我们的自定义控件dashboard,并且如果我们在创建时添加了组名的话,会自动添加进该分组

 

9. 此时我们就可以像QT标准控件一样进行拖放至界面中

 

 

 

写在结尾

 

注意:

1. 如果按照以上步骤编译报错,找不到该库的目录,或者类名未定义之类的,则可以尝试将该自定义控件库对应的.h头文件添加至工程中,并包含头文件。

2. 如果不想在包含头文件时使用头文件的完整路径,可以在.pro文件中使用增加配置,INCLUDEPATH += 头文件的路径

 

 

 此处$$PWD代表当前工作目录,然后直接使用 include 头文件名,这样就等同于include +路径名 + 头文件名

 

使用建议:

在工程目录下,创建一个Include的目录,在该目录下放置所有的设计师自定义控件库的头文件,另外创建一个Lib目录,将所有的控件库放入该目录,使用以上导入外部库的方法导入,并且在.pro文件中添加INCLUDEPATH配置,将头文件目录添加进去。

 

 

 

 

 

posted on 2021-09-17 01:10  大王背我来巡山®  阅读(409)  评论(0)    收藏  举报