QtApplets-自定义控件-2-插件代码分析

简介: QtApplets-自定义控件-2-插件代码分析

image.pngQtApplets-自定义控件-2-插件代码分析

今天是2021年11月5日,今天体验了一把家庭妇男的感觉,不过早上还是贴心的媳妇订了早点,起床就有早点吃,完了简单洗漱收拾一下带媳妇去小公园遛弯。拍了一张照片。



中午第一次为媳妇做了我们老家的特色饭,莜面窝窝,很香,很香,希望她肚子的小宝宝也很喜欢吃。第一次做的有点失败,蒸的时间有点长,窝窝有点倒了,下次蒸7、8分钟就好了。有没有喜欢吃的小伙伴呢



言归正传,开始今天自定义控件的第二篇。


QtApplets-自定义控件-2-插件代码分析

QtApplets-自定义控件-2-插件代码分析

1 pri文件

2 默认插件内容

3 插件项目代码

☞ 源码

关键字: isContainer、domXml、includeFile、createWidget、initialize


1 pri文件

在项目中有一个pri文件,目前看这里面仅有两个内容,应该是我插件库包含的头文件和源文件,算是一个插件的子pro吧应该。

HEADERS += customcontrol.h
SOURCES += customcontrol.cpp

2 默认插件内容


默认的插件源文件内容很简单,和我们建立的普通项目没有什么区别,仅有一个构造函数。如下图所示:image.pngimage.png

#ifndef CUSTOMCONTROLPLUGIN_H
#define CUSTOMCONTROLPLUGIN_H
#include <QDesignerCustomWidgetInterface>                   //使Qt Designer能够访问和构造自定义小部件
class CustomControlPlugin : public QObject, public QDesignerCustomWidgetInterface       //继承QObject和QDesignerCustomWidgetInterface
{
    Q_OBJECT                                                //包含 Q_OBJECT宏
    Q_INTERFACES(QDesignerCustomWidgetInterface)            //这个宏将告诉Qt这个类实现了那些接口,这个宏在实现插件是使用
#if QT_VERSION >= 0x050000                                  //判断Qt版本是否大于5
    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")       //此宏用于声明元数据,该元数据是实例化此对象的插件的一部分
                                                                                    //这个宏需要声明通过对象实现的接口的IID,并应用包含插件的数据文件
                                                                                    //在Qt插件的源代码中,这个宏应该只出现一次
#endif // QT_VERSION >= 0x050000
public:
    /**
     * @brief CustomControlPlugin
     * @param parent
     * 构造函数
     */
    CustomControlPlugin(QObject *parent = 0);
    /**
     * @brief isContainer
     * @return
     * 如果自定义的控件被当做容器使用,则返回true,否者返回false;
     * 大多数自定义的小控件并不用户保护其他小部件,因此他们对此函数的实现将返回false,但是自定义的容器将返回true,以确保他们在Qt Designer中正确运行。
     */
    bool isContainer() const;
    /**
     * @brief isInitialized
     * @return
     * 返回自定义控件的状态,如果已经被初始化了,返回true,否者返回false
     */
    bool isInitialized() const;
    /**
     * @brief icon
     * @return
     * 这个将返回这个自定义控件的图标,用来在Qt Designer中表示这个控件
     */
    QIcon icon() const;
    /**
     * @brief domXml
     * @return
     * 将用于描述自定义控件属性的XML返回给Qt Designer
     */
    QString domXml() const;
    /**
     * @brief group
     * @return
     * 返回自定义小控件所属的组的名称
     */
    QString group() const;
    /**
     * @brief includeFile
     * @return
     * 返回UIC在自定义小控件创建代码时使用的包含文件的路径。
     */
    QString includeFile() const;
    /**
     * @brief name
     * @return
     * 返回接口提供的自定义控件的类名,
     * 返回的名称必须与自定义控件使用的类名相同
     */
    QString name() const;
    /**
     * @brief toolTip
     * @return
     * 返回关于小控件的简短描述,可以在Qt Designer中看到
     */
    QString toolTip() const;
    /**
     * @brief whatsThis
     * @return
     * 在小控件的"what's this?" 帮助中返回可有Qt Designer使用的小控件的描述
     */
    QString whatsThis() const;
    /**
     * @brief createWidget
     * @param parent
     * @return
     * 使用给定的父类返回自定义小控件新实例
     */
    QWidget *createWidget(QWidget *parent);
    /**
     * @brief initialize
     * @param core
     * 初始化小部件以使用指定的formEditor接口
     */
    void initialize(QDesignerFormEditorInterface *core);
private:
    bool m_initialized;             //控件初始化标志位
};
#endif // CUSTOMCONTROLPLUGIN_H

源文件描述:

#include "customcontrol.h"
#include "customcontrolplugin.h"
#include <QtPlugin>
CustomControlPlugin::CustomControlPlugin(QObject *parent)
    : QObject(parent)
{
    m_initialized = false;
}
/**
 * @brief CustomControlPlugin::initialize
 * 初始化小部件以使用指定的formEditor接口
 */
void CustomControlPlugin::initialize(QDesignerFormEditorInterface * /* core */)
{
    if (m_initialized)
        return;
    // Add extension registrations, etc. here
    m_initialized = true;
}
/**
 * @brief CustomControlPlugin::isInitialized
 * @return
 * 返回自定义控件的状态,如果已经被初始化了,返回true,否者返回false
 */
bool CustomControlPlugin::isInitialized() const
{
    return m_initialized;
}
/**
 * @brief CustomControlPlugin::createWidget
 * @param parent
 * @return
 * 使用给定的父类返回自定义小控件新实例
 */
QWidget *CustomControlPlugin::createWidget(QWidget *parent)
{
    return new CustomControl(parent);
}
/**
 * @brief CustomControlPlugin::name
 * @return
 * 返回接口提供的自定义控件的类名,返回的名称必须与自定义控件使用的类名相同
 */
QString CustomControlPlugin::name() const
{
    return QLatin1String("CustomControl");
}
/**
 * @brief CustomControlPlugin::group
 * @return
 * 返回自定义小控件所属的组的名称
 */
QString CustomControlPlugin::group() const
{
    return QLatin1String("");
}
/**
 * @brief CustomControlPlugin::icon
 * @return
 * 这个将返回这个自定义控件的图标,用来在Qt Designer中表示这个控件
 */
QIcon CustomControlPlugin::icon() const
{
    return QIcon(QLatin1String(":/logo.jpg"));
}
/**
 * @brief CustomControlPlugin::toolTip
 * @return
 * 返回关于小控件的简短描述,可以在Qt Designer中看到
 */
QString CustomControlPlugin::toolTip() const
{
    return QLatin1String("");
}
/**
 * @brief CustomControlPlugin::whatsThis
 * @return
 * 在小控件的"what's this?" 帮助中返回可有Qt Designer使用的小控件的描述
 */
QString CustomControlPlugin::whatsThis() const
{
    return QLatin1String("");
}
/**
 * @brief CustomControlPlugin::isContainer
 * @return
 * 如果自定义的控件被当做容器使用,则返回true,否者返回false;大多数自定义的小控件并不用户保护其他小部件,因此他们对此函数的实现将返回false,但是自定义的容器将返回true,以确保他们在Qt Designer中正确运行。
 */
bool CustomControlPlugin::isContainer() const
{
    return false;
}
/**
 * @brief CustomControlPlugin::domXml
 * @return
 * 将用于描述自定义控件属性的XML返回给Qt Designer
 */
QString CustomControlPlugin::domXml() const
{
    return QLatin1String("<widget class=\"CustomControl\" name=\"customControl\">\n</widget>\n");
}
/**
 * @brief CustomControlPlugin::includeFile
 * @return
 * 返回UIC在自定义小控件创建代码时使用的包含文件的路径。
 */
QString CustomControlPlugin::includeFile() const
{
    return QLatin1String("customcontrol.h");
}
#if QT_VERSION < 0x050000
Q_EXPORT_PLUGIN2(customcontrol, CustomControlPlugin)
#endif // QT_VERSION < 0x050000

image.png

目录
相关文章
|
JavaScript 前端开发 API
一看就懂的gulp操作指南:让前端工作变得更加轻松(三)
一看就懂的gulp操作指南:让前端工作变得更加轻松
UE DTMqtt 虚幻引擎 Mqtt 客户端插件说明
UE DTMqtt 虚幻引擎 Mqtt 客户端插件说明
1475 0
|
Java 数据库连接 数据库
❤️爆肝万字!一文最全总结之Spring从入门到入土❤️(建议收藏)
❤️爆肝万字!一文最全总结之Spring从入门到入土❤️(建议收藏)
477 0
HARDWARE --- IIC协议
HARDWARE --- IIC协议
1295 1
|
4月前
|
人工智能 前端开发 JavaScript
Vibe Coding 时代,为什么 Tailwind + Shadcn/ui 正在成为现代前端的默认答案
这篇文章想讨论的,不只是 `Tailwind CSS + shadcn/ui` 为什么流行,而是为什么它们会在 Vibe Coding 时代越来越像现代前端的默认组合。相比传统组件库,这套方案把样式、结构与组件源码更直接地暴露在项目本身中,既提升了开发者的控制权,也降低了 AI 理解、修改和协作的成本。
|
传感器 调度 开发者
【Freertos基础入门】freertos任务的优先级
【Freertos基础入门】freertos任务的优先级
2398 0
|
存储 传感器 定位技术
【NI Multisim 14.0原理图设计基础——元器件分类】
一、元器件分类 NI Multisim 14.0不仅提供了数量众多的元器件符号图形,而且还设计了元器件的模型,并分门类地存储在各个元器件库中。下面按照元器件库的命名不同详细介绍常用的元器件。 1.电源库 单击“元器件”工具栏中的“放置源” 按钮,Sources 库的“系列”栏包括以下几种,如图所示: 电源(POWER-SOURCES):包括常用的交直流电源、数字地、地线、星形或三角形连接的三相电源、VCC、VDD、VEE、VSS 电压源,其元器件”栏下内容如图所示: 电压信号源(SIGNAL-VOLTAG…):包括交流电压、时钟电压、脉冲电压、指数电压、FM、AM等多种形式的电压信号,其“元器
22361 4
【NI Multisim 14.0原理图设计基础——元器件分类】
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
人工智能 自然语言处理 IDE
6 款 AI 工具,助力写出更优质代码
6 款 AI 工具,助力写出更优质代码
3381 3
6 款 AI 工具,助力写出更优质代码
|
10月前
|
存储 弹性计算 架构师
年度账单分析:资深架构师教你五个步骤降低30%云资源成本
企业上云后成本飙升?资深架构师揭秘实战“五步降本法”:从成本可视化、计算资源优化,到存储、网络治理,最终通过架构革新实现持续降本。系统化策略助你降低30%以上云支出,将云计算从成本负担转变为高效引擎。(238字)

热门文章

最新文章