# cjc_quc **Repository Path**: et0803/cjc_quc ## Basic Information - **Project Name**: cjc_quc - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-08-19 - **Last Updated**: 2022-04-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1. plugin编译安装 1. 把自定义控件编译成plugin的目的是,可以在qtcreator中的design模块中,可视化地看见我们自定义的控件,可以在设计时直接拖到ui界面中中进行界面布局设计。 2. 为了自定义控件插件可以在qtcreator中的design模块中被识别,要保证编译自定义控件插件的编译器版本,和qtcreator的编译器版本一致。要么安装qtcreator编译所用到的编译器套件,要么自己选择编译器编译qtcreator(ubuntu系统中可能会用到)。 3. 查看当前qtcreator的编译器版本:在qtcreator的help中About Qt Creator中查看qtcreator编译所用的编译器。 4. 编译自己的插件项目,需要编译成release版本。 5. 将bin中的生成的插件库cjc_quc.dll复制到C:\Qt\Qt5.14.2\Tools\QtCreator\bin\plugins\designer 中,那么qtcreator程序的designer中就会有对应的控件。 6. qtcreator中使用自定义控件时,自定义控件在控件栏的icon,为生成插件时icon文件夹中对应的被选中使用的icon,可以查看自定义控件插件对象的源码(例如flightadiplugin.cpp) 7. 在qtcreator的design中,鼠标左键拖动自定义控件图标,可以显示自定义控件的初始化形貌。 8. 自定义控件在qtcreator的design的控件栏中的分组和名称,可以查看自定义控件插件对象的源码(例如flightadiplugin.cpp)中的 name() 和 group() 方法。 # 2. 自定义插件的使用 1. 自定义插件项目中,designer.pro中包含了 DEFINES += cjc_quc,头文件中有 ``` #ifdef cjc_quc class Q_DECL_EXPORT FlightADI : public QGraphicsView #else class FlightADI : public QGraphicsView #endif ``` 这就相当于自定义控件库导出了FlightADI这个类,可以供其他程序链接动态库使用。 如果designer.pro中没有包含 DEFINES += cjc_quc,那么生成的动态库cjc_quc.dll应该就不会导出对应的类。 上述代码跳转后,在qcompilerdetection.h中有 ``` # define Q_DECL_EXPORT __declspec(dllexport) //正对于msvc的编译器 ``` 2. plugin对应的代码,是把自定义控件代码中的控件类,生成一个控件对象,放到plugin控件插件的对象list中。每一控件的plugin代码,基本都是一致的。 3. 自定义控件编译成插件,只是为qtcreator的design控件栏中能够可视化显示控件,和后期自己写代码调用这自定义控件无关。自己写代码使用这些自定义控件,在编译时,要链接自己当前所选的编译套件编译的自定义控件库,同时要找到这些自定义控件的头文件。 4. 总结第3条的所要做的处理:在第1条中有DEFINES += cjc_quc(最终编译出来的插件导出自定义类的前提下),编译每个编译器套件对应的release和debug版本的动态库cjc_quc.dll和cjc_qucd.dll,放到对应版本的qt库中(dll放在C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin中,msvc编译得到的lib放到C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib)。然后复制出自己要用到的自定义控件的头文件,放到项目的头文件搜索路径中(此时使用自定义控件编程,已经和plugin相关的代码无关) 5. 替代第4条,也可以直接复制对应控件的cpp和h文件到自己的项目中,不使用调用自定义控件动态库中的自定义控件类的方法。