用于扩展Qt本身的插件(上)

Qt自身插件

  • 引言
  • 示例
    • 插件与应用插件的程序作为整体
    • 插件和应用插件的程序单独存在
    • 实现插件
    • 编写测试插件的程序
    • 应用插件
    • 运行结果

引言

用于扩展qt自身的插件按照我的理解分为两种:
1. 直接扩展Qt自身,无需在QtCreator的设计器中加载;
2. 扩展Qt自身,同时需要在QtCreator的设计器中加载,类似于自定义控件,可像Qt的基本控件那般在设计器中直接展示,拖拽使用,具有属性,信号槽等。

本文记录扩展Qt自身的插件,但不用在QtCreator的设计器中加载的插件。

示例

本示例时基于样式进行扩展,自定义自己的样式种类。
有两种创建项目的方式,一种是将插件与使用插件的程序分别作为子项目,整体包含在一个项目文件夹中;另一种是将插件和使用插件的程序分别作为单独的项目。
下面分别记录下创建过程。

插件与应用插件的程序作为整体

器效果就是这样:
在这里插入图片描述
插件Plugin与StyleWindow分别作为StylePlugin3的子项目,两个位于用一个文件夹StylePlugin3下。方便管理。
其创建是这样的:
在QtCreator中点击菜单栏的文件-》新项目-》其他项目-》子目录项目。弹出:
在这里插入图片描述
输入项目名称StylePlugin3,选择合适的创建路径,点击下一步按钮。弹出:
在这里插入图片描述
选择想要使用的编译器的种类,注意与使用该插件的应用程序的编译器保持一致即可。我这里选择的是Qt6.6.0 MSVC2019 64bit,点击下一步按钮,弹出弹窗后,点击完成&添加子项目按钮,弹出新建子项目弹窗:
在这里插入图片描述
选择其它项目-》Qt4设计师自定义控件,点击选择按钮。弹出:
在这里插入图片描述
输入名称Plugin,创建路径选择默认的路径,点击下一步按钮。弹出弹窗后,在下面的控件类下面输入类名:SimpleStyle。注意类名采用驼峰命名。默认是选择包含项目的,需手动勾选创建代码框架,会生成对应的下图中所示的系列文件名,此时可在图标文件项点击后面的浏览按钮选择自己要添加的图标图片。
在这里插入图片描述
也可在说明项中输入相应的组名,工具提示,已经控件是否是一个容器(即控件中是否可以放入、拖入其他控件)。在这里插入图片描述
也可编写属性。
在这里插入图片描述
之后点击下一步按钮。这里我没有修改属性,也没有该说明,然后点击下一步按钮,一路操作,直到点击完成按钮。
此时项目的结构图如下:
在这里插入图片描述
插件项目Plugin创建好之后,接下来创建使用插件的应用程序。
在项目文件夹StylePlugin3上右键,弹出菜单中选择添加子项目-》Application(Qt)->Qt Widget Application,创建基于Qt的应用程序。
在这里插入图片描述
后面的步骤就不用说了,项目名为StyleWindow,路径采用默认的就行,基类为QWidget,采用默认声的Widget就行,不要勾选ui,该项目不用ui界面,一路操作,直到完成。
注意编译器选择与插件项目的编译器相同的编译器。

此时项目结构如下:
在这里插入图片描述
至此第一种将插件与使用插件的应用程序放在同一个目录下的项目已经创建完成。

插件和应用插件的程序单独存在

另一种将插件与使用插件的应用程序各自作为一个项目的创建如下。
首先打开QtCreator,选择菜单栏的文件-》新建项目-》其它项目->子目录项目,点击选择按钮。弹出:
在这里插入图片描述
输入项目名称StylePlugin,点击下一步按钮。弹出窗口中选择你想使用的编译器,点击下一步按钮,弹出弹窗中点击完成&添加子项目。弹出:
在这里插入图片描述
选择其他项目-》Qt4设计师最定义控件,点击选择按钮。弹出:
在这里插入图片描述
输入名称Plugin,点击下一步按钮。弹出:
在这里插入图片描述
在控件类下面输入类名SimplePlugin,勾选代码框架,点击下一步按钮。
在这里插入图片描述
一路下一步,直到完成。
项目结构如下:
在这里插入图片描述
这时插件创建的过程,接下来创建使用插件的应用程序。
其实质就是创建一个基于Qt的应用程序,菜单栏中点击文件-》新建项目-》Qt Application->Qt Widget Application,后面的就不细述了,就是创建一个基于Qt的应用程序。
创建好之后,项目结构如下(项目名字自己起就行):
在这里插入图片描述
至此,将插件与使用插件的应用程序分别创建完成。

实现插件

项目创建好之后,接下来实现插件类中代码编写。
在按照第一种方式创建好的项目StylePlugin3中:
在这里插入图片描述
StylePlugin3.pro

TEMPLATE = subdirs

SUBDIRS += \
    Plugin \
    StyleWindow

Plugin.pro

CONFIG      += plugin debug_and_release
TARGET      = $$qtLibraryTarget(simplestyleplugin3)
TEMPLATE    = lib

HEADERS     = simplestyleplugin.h
SOURCES     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/536525.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sonar搭建(linux系统)

前景 静态代码扫描是CI/CD中重要的一环,可以在代码提交到代码仓库之后,在CI/CD流程中加入代码扫描步骤,从而及时地对代码进行质量的检查。这可以有效地降低后期维护成本,优化产品质量,提高产品交付速度。同时&#xf…

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进麻雀优化算法优化最小二乘支持向量机分类预测

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进麻雀优化算法优化最小二乘支持向量机分类预测 目录 分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进麻雀优化算法优化最小二乘支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述…

C语言中的数据结构--链表的应用2(3)

前言 上一节我们学习了链表的应用,那么这一节我们继续加深一下对链表的理解,我们继续通过Leetcode的经典题目来了解一下链表在实际应用中的功能,废话不多说,我们正式进入今天的学习 单链表相关经典算法OJ题4:合并两个…

【分享】各大框架都在使用的Unsafe类

前言 几乎每个使用 Java开发的工具、软件基础设施、高性能开发库都在底层使用了sun.misc.Unsafe,比如Netty、Cassandra、Hadoop、Kafka等。 Unsafe类在提升Java运行效率,增强Java语言底层操作能力方面起了很大的作用。但Unsafe类在sun.misc包下&#x…

大型语言模型有什么用?

大型语言模型有什么用? 大型语言模型识别、总结、翻译、预测、生成文本和其他内容。 AI 应用程序正在总结文章、撰写故事和进行长时间对话——而大型语言模型正在承担繁重的工作。 大型语言模型或 LLM 是一种深度学习算法,可以根据从海量数据集中获得…

linux进阶篇:下载工具wget的安装以及应用

1 wget工具介绍 wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。 wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指&a…

【C语言基础】:文件操作详解(后篇)

文章目录 一、文件的顺序读写1.1 顺序函数读写函数介绍1.2 fgetc函数和fputc函数1.3 fputs函数和fgets函数1.4 fprintf函数和fscanf函数1.5 fwrite函数和fread函数 二、文件的随机读写2.1 fseek函数2.2 ftell函数2.3 rewind函数 三、文件读取结束的判定3.1 feof函数 四、文件缓…

Linux mmap

目录 内存映射概念: 函数原型: 内存映射步骤: 主要功能 : 系统调用mmap用于共享内存的两种方式: 使用普通文件提供的内存映射: 使用特殊文件提供匿名内存映射: 注意事项 : …

【漏洞复现】潍微科技-水务信息管理平台 ChangePwd SQL注入漏洞

0x01 产品简介 潍微科技-水务信息管理平台主要帮助水务企业实现水质状态监测、管网运行监控、水厂安全保障、用水实时监控以及排放有效监管,确保居民安全稳定用水、环境有效保护,全面提升水务管理效率。 0x02 漏洞概述 潍微科技-水务信息管理平台 ChangePwd 接口存在SQL注…

YOLOv8改进 | 检测头篇 | 自研超分辨率检测头HATHead助力超分辨率检测(混合注意力变换器检测头)

一、本文介绍 本文给大家带来的改进机制是由由我本人利用HAT注意力机制(超分辨率注意力机制)结合V8检测头去掉其中的部分内容形成一种全新的超分辨率检测头。混合注意力变换器(HAT)的设计理念是通过融合通道注意力和自注意力机制…

Windows Edge 兼容性问题修复:提升用户体验的关键步骤

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

【随笔】Git 基础篇 -- 远程仓库 git clone(二十五)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

FTP所有操作

产生告警原理: 告警中出现 FTP STOP 关键字。Hawkeye keylogger木马名

iPad 无法解锁?修复 iPad 滑动解锁不起作用的 9 个解决方案

“我的 iPad Pro 一整天都工作正常,直到 20 分钟前。当我解锁它时,它不让我向上滑动。屏幕有响应,但我的 iPad 无法解锁。是否有其他人遇到过这种情况并找到了解决方法?解决方案?” ——来自 Apple 支持社区 iPad 屏幕…

前端开发攻略---根据音频节奏实时绘制不断变化的波形图。深入剖析如何通过代码实现音频数据的可视化。

1、演示 2、代码分析 逐行解析 JavaScript 代码块&#xff1a; const audioEle document.querySelector(audio) const cvs document.querySelector(canvas) const ctx cvs.getContext(2d)这几行代码首先获取了 <audio> 和 <canvas> 元素的引用&#xff0c;并使用…

Quartz + SpringBoot 实现分布式定时任务

文章目录 前言一、分布式定时任务解决方案二、Quartz是什么&#xff1f;1.quartz简介2.quartz的优缺点 二、Quartz分布式部署总结 前言 因为应用升级&#xff0c;由之前的单节点微服务应用升级为集群微服务应用&#xff0c;所以之前的定时任务Spring Scheduled不再适用了&…

进程等待waitwaitpid

文章目录 进程等待进程等待的必要性进程等待的方法waitwaitpidstatus 非阻塞等待 进程等待 任何子进程&#xff0c;在退出的情况下&#xff0c;一般必须要被父进程等待 进程等待的必要性 1.父进程通过等待&#xff0c;解决子进程退出的僵尸问题&#xff0c;回收系统资源。 2.…

基于springboot实现知识管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现知识管理系统演示 摘要 随着信息互联网信息的飞速发展&#xff0c;无纸化作业变成了一种趋势&#xff0c;针对这个问题开发一个专门适应师生作业交流形式的网站。本文介绍了知识管理系统的开发全过程。通过分析企业对于知识管理系统的需求&#xff0c;创建了…

012:vue结合纯CSS实现蛇形流程图/步骤条

文章目录 1. 实现效果2. 实现代码 1. 实现效果 2. 实现代码 <template><div class"container"><div v-for"(item, index) in list" class"grid-item"><div class"step">step{{index1}}</div></div&…

大厂Java笔试题之对完全数的处理

题目&#xff1a;完全数&#xff08;Perfect number&#xff09;&#xff0c;又称完美数或完备数&#xff0c;是一些特殊的自然数。 它所有的真因子&#xff08;即除了自身以外的约数&#xff09;的和&#xff08;即因子函数&#xff09;&#xff0c;恰好等于它本身。 例如&…