如何创建Qt插件?

本篇文章只能回答一半,如何创建扩展Qt自身的插件。

Qt提供了两种用于创建插件的API:

用于编写Qt自身扩展的高级API:自定义数据库驱动程序,图像格式,文本编解码器,自定义样式等。本次的例子就是自定义样式的例子。

用于扩展Qt应用程序的低级API。下次介绍。

例如,如果您要编写自定义QStyle子类并让Qt应用程序动态加载它,则可以使用更高级别的API。由于较高级别的API建立在较低级别的API之上,因此两者都有一些共同的问题。

高级API:扩展 Qt自身,编写扩展Qt本身的插件是通过将适当的插件基类继承为子类,实现一些功能并添加宏来实现的。

Qt官方文档: https://doc.qt.io/qt-5/plugins-howto.html。

程序环境: Ubuntu 14.04、 Qt5.5.1

使用Qt自带的例子方便入门。Qt5.5.1自带的例子无法运行出红色按钮的效果,所以做了微小改动。

  1. 打开Qt自带的工程

打开Qt Creator后,默认在【Welcome】选项,之后选择【Examples】,搜索【sty】,选择红色按钮那个。

2.插件工程简介

SimpleStylePlugin类需继承父类QStylePlugin,并按照对应规则的接口进行实现,QStylePlugin类插件基类中的一个,属于样式基类。

在SimpleStylePlugin中create了 SimpleStyle,也就是我们自己要实现的样式。

SimpleStyle继承了QProxyStyle,重新实现了polish()。

void SimpleStyle::polish(QPalette &palette)

{

// palette.setColor(QPalette::Button, Qt::red); //无法运行出红色按钮的效果

palette = QPalette(QPalette::Button, Qt::blue);

}

3.主程序简介

主程序中创建了窗口部件,这部分我们无需主要注意。我们要关注的是在主程序中如何使用我们新的样式。

QApplication::setStyle(QStyleFactory::create("simplestyle"));

4.程序运行效果

插件生成路径:

5.让其他工程使用自定义样式

将我们生成的插件拷贝到下面目录,Qr Designer在运行时会自动查找插件,如果找到插件则会自动加载。

下面是一个测试效果。此时无需我们再主程序中调用QApplication::setStyle(QStyleFactory::create("simplestyle")),样式也会自动被改变。

6.总结

主要就是运行了Qt自带的例子,方便初学者结合Qt自带的文档进行理解。

Qt的插件也可以理解为一种动态库,只不过只能是使用Qt来进行加载。

使用Qt开发的大型程序可以通过Qt的插件机制进行解耦。加载插件的宿主程序不关心插件的业务逻辑,只需按照对应接口调用即可;插件开发者可自己测试写的插件,方便维护。

欢迎关注公众号: Pou光明

api如何使用_使用插件扩展Qt自身相关推荐

  1. 多啦咪图虫_浏览器插件图片批量下载工具扩展插件图片下载

    下载地址: 多啦咪图虫_浏览器插件图片批量下载工具扩展插件图片下载-紫咖啡小站是一款内嵌到浏览器的工具:可以帮你方便地从任意网站上批量采集喜欢的图片并迅速完成筛选和保存 多啦咪图虫 图片批量下载工具支 ...

  2. ie内核浏览器_[正式版下载] 微软全新 Chrome 内核 Edge 浏览器!原生支持 Chrome 插件扩展...

    尽管微软的 Office 和 Windows 10 势头不错,但像 WP 手机.XBox 等方面似乎并未获得预期的成功.而先前为了替代老旧的 IE 浏览器,微软倾力开发的 Edge 也未见起色. 不过 ...

  3. java spi 扩展_【扩展和解耦】JAVA原生SPI实现插件扩展

    Java极客  |  作者  /  铿然一叶 这是Java极客的第 81 篇原创文章 相关阅读: 1. 什么是插件 通俗的讲插件有以下特征: 1.增加或者替换已有能力 2.不影响原有功能 3.对原有系 ...

  4. Mybatis生成器插件扩展,生成OR操作

    Mybatis生成器插件扩展,生成OR操作 ManExample example = new ManExample();ManExample.Criteria and = example.create ...

  5. Mybatis生成器插件扩展,定制方法生成,list参数生成

    Mybatis生成器插件扩展,定制方法生成 public Criteria andNameIsEmpty() {addCriterion("`name` = ''");setCri ...

  6. Mybatis生成器插件扩展,生成findInSet方法

    Mybatis生成器插件扩展,生成findInSet方法 public Criteria andNameFindInSet(String value) {addCriterionPattern(&qu ...

  7. Chrome插件(扩展)

    [干货]Chrome插件(扩展)开发全攻略 写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这 ...

  8. 谷歌浏览器Chrome插件扩展开发教程

    下文是我看到的一篇很好的Chrome扩展开发攻略,感觉很有价值,内容详尽,排版精美,遂转载. 原文由小茗同学发表于小茗同学的博客园:[干货]Chrome插件(扩展)开发全攻略 1. 写在前面 我花了将 ...

  9. 【干货】Chrome插件(扩展)开发全攻略-转载

    [干货]Chrome插件(扩展)开发全攻略 写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这 ...

最新文章

  1. Flask-Email实现发送大量的电子邮件(可以限制发送的邮件数)
  2. COM线程模型的行为
  3. 工作272:上传部分代码优化之两种上传视频的方式
  4. 数据结构练习题之树和图(附答案与解析)
  5. 使用github找资源
  6. 如何利用python整合excel_一篇文章告诉你如何利用python实施自动化办公,操作Excel...
  7. 【PCB学习笔记】绘制智能车四层板 --- DRC检查,拼版设计及资料输出
  8. t检验的显著性p值python_t检验中的t值和p值是什么关系_t检验和p值的关系
  9. WEBService-SOAP协议
  10. gitlab接入公司内部单点登录
  11. 软件工程基础知识-软件质量
  12. 互联网+创新创业大赛反思总结
  13. Science | 华盛顿大学Baker实验室提出新方法设计全新蛋白质
  14. 守望者的逃离 动态规划+滚动数组
  15. 在我们身边的交互式设计失败的例子
  16. Stream Collectors - joining
  17. C Programming学习笔记【谭浩强老师编】(第四章选择结构程序设计)02 逻辑运算符和逻辑表达式
  18. Liunx服务器安装SVN
  19. DVD刻录工具(anymp4 dvd creator 7)pjb v7.2.58
  20. CSS文本样式和CSS3文本效果以及背景

热门文章

  1. mysql java orm_ObjectiveSQL(Java ORM) 之 MySQL 实战
  2. Linux课程设计八音盒,单片机课程设计——八音盒精要.doc
  3. u盘被分区之后怎么合并linux,U盘格式化做启动盘后从16GB变成200MB的解决方法
  4. flux服务器推消息,在Spring WebFlux响应式处理程序中发送JMS消息:它是否阻塞?
  5. restful可以转发么_什么是RESTFUL?REST的请求方法有哪些,有什么区别?
  6. Python的零基础超详细讲解(第八天)-Python的条件判断
  7. java jpanel添加背景_java – 将背景图像添加到JPanel
  8. python循环队列_关于循环队列的一些讲解
  9. c语言将ascii码存入eeprom,微机原理复习题答案+_Fixed
  10. 如何为jframe设置于右侧滑轮_如何为电脑设置屏保密码?