`

自定义插件

    博客分类:
  • Qt
 
阅读更多
创建自定义插件

1.         创建工程



  QT4 Designer PlugIn

  后续配置都使用默认值,这里我们创建一个QHist插件。



2.         新建后,直接编译,会产生如下错误

1>LINK : fatal error LNK1181: cannot open input file 'QtDesignerd.lib'

这是因为此工程默认引用的是QtDesignerd.lib库,更改其为版本对应的库即可消除故障,我这里使用的是

QtDesignerd4.lib(Release版本使用QtDesigner4.lib)。



3.         修改文件,增加声明,如下:

修改前:

#include <QtGui/QWidget>



class QHist : public QWidget

修改后

#include <QtGui/QWidget>

#include <QtDesigner/QDesignerExportWidget>



class QDESIGNER_WIDGET_EXPORT QHist : public QWidget



如果不执行此操作,后续应用程序连接时,会上报链接错误:

error LNK2019:



4.         实现插件,这里我只是在此控件中绘制了一条直线。

重载paintEvent事件

protected:

void paintEvent(QPaintEvent *event);

    

     void QHist::paintEvent(QPaintEvent *event)

{

    QPainter painter(this);



    painter.drawLine(0, 0, 10, 10);

}

这时,编译会报错误,原因是qhist.cpp中还缺少头文件,引入即可消除:

#include <QtGui>



5.         编译Release版本

6.         到此我们就完成了插件的创建;





使用自定义插件(QT Designer)

1.         将编译生成的相关文件拷贝到QT的plugins/designer目录;



2.         将qhist.h文件拷贝到QT所在的include/QtGui目录;



到此,打开QT Designer,即可看到新增的QHist插件了;







使用自定义插件(APP)

1.         将编译生成的相关文件拷贝到用用工程所在的工程目录;







到此,编译应用程序,运行即可正常使用自定义的插件了;









创建多个插件到一个插件库

前面介绍的是生成单个自定义插件,QT还支持将多个自定义插件生成到一个插件库中,如下:

1.         创建一个插件库工程,工程名为MyCustomWidgets;

2.         创建新的类,分别是QHist,QHistPlugin,QScatter,QScatterPlugin,相关实现代码参见上述单个插件的实现,和先前的唯一差别就是:源文件末尾不在需要添加Q_EXPORT_PLUGIN2声明;

3.         修改MyCustomWidgets的定义和实现,如下:

// 头文件

#include <QtDesigner/QtDesigner>

#include <QtCore/qplugin.h>



#include "qhistplugin.h"

#include "qscatterplugin.h"



class MyCustomWidgets: public QObject, public QDesignerCustomWidgetCollectionInterface

{

    Q_OBJECT

    Q_INTERFACES(QDesignerCustomWidgetCollectionInterface)



public:

    MyCustomWidgets(QObject *parent = 0);



    virtual QList<QDesignerCustomWidgetInterface*> customWidgets() const;



private:

    QList<QDesignerCustomWidgetInterface*> widgets;

};



// 源文件

#include "mycustomwidgets.h"



MyCustomWidgets::MyCustomWidgets(QObject *parent)

: QObject(parent)

{

    widgets.append(new QHistPlugin(this));

    widgets.append(new QScatterPlugin(this));

}



QList<QDesignerCustomWidgetInterface*> MyCustomWidgets::customWidgets() const

{

    return widgets;

}



Q_EXPORT_PLUGIN(MyCustomWidgets)

这里从QDesignerCustomWidgetCollectionInterface派生了一个子类MyCustomWidgets;

4.         编译Release版本,将此库文件拷贝到Designer相关目录,此时新打开Qt Designer将可以看到两个自定义插件;

分享到:
评论

相关推荐

    ros+rviz+自定义消息+自定义插件

    在这个项目中,“ros+rviz+自定义消息+自定义插件”意味着我们将深入探讨如何在ROS环境下利用RViz创建和使用自定义的消息类型以及开发自定义插件。 首先,我们来看自定义消息。在ROS中,消息是用来在节点之间传递...

    cordova ios 自定义插件例子

    iOS 平台是 Cordova 支持的重要部分,而自定义插件则是扩展 Cordova 应用功能的关键手段。这个"cordova ios 自定义插件例子"是一个适合新手入门的学习资源,它会引导你了解如何为 iOS 平台创建和使用自定义 Cordova ...

    按键精灵自定义插件制作模块(VB 6.0)

    **按键精灵自定义插件制作模块(VB 6.0)** 按键精灵是一款强大的自动化工具,它允许用户通过录制和脚本编辑的方式来实现各种复杂的电脑操作。为了满足不同用户的需求,按键精灵支持自定义插件的开发,这使得用户能够...

    MyBatis Generator自定义插件实现自定义Mapper

    在实际项目中,为了满足特定需求或提高代码复用性,我们有时需要对默认生成的代码进行扩展,这就是自定义插件的作用。下面将详细讲解如何实现MyBatis Generator的自定义插件,以实现自定义Mapper。 首先,我们需要...

    Cordova添加自定义插件Demo

    Cordova添加自定义插件是移动应用开发中的一个重要环节,特别是在使用Cordova框架构建混合应用时。Cordova允许开发者利用Web技术(HTML、CSS、JavaScript)来构建原生的移动应用,而自定义插件则提供了与设备底层...

    Qt -自定义插件-电池插件

    Qt -自定义插件。 具体可看博客了解:https://blog.csdn.net/automoblie0/article/details/105399584

    mybatis自定义插件源码

    本文将深入探讨如何通过自定义插件在插入数据记录时自动添加自定义字段值,以及实现 SQL 拦截和改造。 首先,了解 MyBatis 插件的工作原理。MyBatis 的插件基于 Java 的动态代理机制,插件是对 MyBatis 中某些接口...

    PhoneGap iOS 自定义插件

    PhoneGap iOS 自定义插件是移动应用开发中的一个重要概念,它允许开发者利用JavaScript与原生iOS平台进行交互,实现更高效、更丰富的功能。PhoneGap是一个开源框架,它基于Apache Cordova,允许开发者使用HTML、CSS...

    cordova3.0 ios自定义插件demo

    这个“cordova3.0 ios自定义插件demo”是针对iOS平台的一个示例,用于展示如何在Cordova 3.0及以上版本中创建和使用自定义插件。 首先,理解Cordova插件的结构至关重要。每个Cordova插件都是由一个或多个平台特定的...

    springboot集成generator自定义插件.rar

    在这个"springboot集成generator自定义插件.rar"项目中,我们看到的重点是如何在Spring Boot项目中集成MyBatis Generator,并且自定义注释。这通常涉及到以下几个关键知识点: 1. **Spring Boot与MyBatis集成**:...

    Android Cordova 插件开发之编写自定义插件

    通过以上步骤,你已经成功创建了一个简单的 Cordova 自定义插件,它能在 Android 平台上接收 JavaScript 调用,并返回一个问候消息。这只是一个起点,实际开发中,你可以根据需求扩展功能,例如访问设备硬件、网络...

    Ckeditor自定义插件

    在本场景中,我们探讨的是如何为CKEditor自定义插件,以便实现特定功能:当用户选择一段文字后,点击自定义按钮,这段文字后面会添加一个图标,该图标作为超链接指向特定地址,并且选中的文字作为超链接的参数。...

    Office 自定义插件 Vsto

    标题:“Office 自定义插件 Vsto” 在Microsoft Office的应用中,VSTO(Visual Studio Tools for Office)是一种强大的开发工具,它允许程序员利用.NET Framework和Visual Studio来创建自定义的解决方案,以扩展...

    ckeditor自定义插件

    本主题聚焦于“ckeditor自定义插件”,这涉及到如何扩展CKEditor的功能,以满足特定项目的需求。下面将详细探讨CKEditor自定义插件的创建、使用以及可能遇到的问题。 首先,CKEditor是一款开源的JavaScript库,提供...

    AndroidStudio自定义Gradle插件

    - `MyExtension`类:作为插件的配置对象,允许用户在`build.gradle`文件中自定义插件的行为。 - `build.gradle`(插件项目):配置插件的GAV信息,以及发布插件到Maven仓库的配置。 - `build.gradle`(应用项目):...

    maven 自定义插件小示例

    本文将深入探讨“Maven自定义插件小示例”,以帮助开发者更好地理解和利用Maven的强大功能。 Maven插件是Maven生态系统中的一个重要组成部分,它们提供了各种各样的功能,如编译、测试、打包、部署等。有时,标准...

    全站URL自定义插件

    ECSHOP全站URL自定义插件是一种用于优化电商网站URL结构的工具,它能够帮助网站管理员将复杂的参数型URL转换为更加友好、易于理解的目录形式。这对于提升用户体验、增强搜索引擎友好性以及提高网站的专业形象至关...

    redmine自定义插件开发

    "红矿自定义插件开发" 红矿(Redmine)是一款基于Ruby on Rails的开源项目管理工具,提供了强大的插件机制,允许开发者创建自己的插件,以满足不同的需求。在本文中,我们将详细介绍如何开发一个红矿自定义插件,...

    ionic2自定义插件demo

    在本文中,我们将深入探讨如何在Ionic 2框架中创建自定义插件,以及与之相关的开发过程。 Ionic 2是基于Angular 2构建的移动应用框架,它为开发者提供了丰富的功能,使得构建原生iOS和Android应用变得更加简单。...

Global site tag (gtag.js) - Google Analytics