QT QPluginLoader 插件开发 ui界面打包dll

这篇具有很好参考价值的文章主要介绍了QT QPluginLoader 插件开发 ui界面打包dll。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 将项目模块化,每一个模块单独开发,模块的组成形成最终的主程序,

点击左侧按钮就会弹出对应的插件应用,每一个子窗口都是单独的dll 插件,

灵活,升级,下载,卸载。

效果:

qpluginloader,QT C++ python,qt,c++

 

 

打开QT Creator 新建插件开发项目

qpluginloader,QT C++ python,qt,c++

 下一步后选择 Qt Plugin 开发

qpluginloader,QT C++ python,qt,c++

添加依赖库,在.pro里

qpluginloader,QT C++ python,qt,c++

 

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TEMPLATE = lib

CONFIG += c++17

 删掉自带的全部文件

qpluginloader,QT C++ python,qt,c++

 新建 AbstractPlugin.h  抽象接口类, 带Ui 界面的插件接口

qpluginloader,QT C++ python,qt,c++

 qpluginloader,QT C++ python,qt,c++

 qpluginloader,QT C++ python,qt,c++

 qpluginloader,QT C++ python,qt,c++

 

#ifndef ABSTRACTPLUGIN_H
#define ABSTRACTPLUGIN_H

#include <QObject>

class QWidget;

class AbstractPlugin {
public:
    virtual ~AbstractPlugin() = default;

    virtual QWidget *newObject() = 0;
};
// id 可以自己按照项目定义
#define AbstractInterface_iid "com.Plugin.AbstractPlugin"

Q_DECLARE_INTERFACE(AbstractPlugin, AbstractInterface_iid)
#endif // ABSTRACTPLUGIN_H

新建ui界面  右击项目。Add new

界面按照自己的需求写

qpluginloader,QT C++ python,qt,c++

 实现抽象接口。继承上面定义的抽象类,实现抽象方法,

方法的作用是实列化一个上面写的ui对象并返回

再次添加一个AbstractPluginAPI.h 文件

qpluginloader,QT C++ python,qt,c++

 

接口类创建

继承上面定义的抽象类,实现抽象方法,方法的作用是实列化一个上面写的ui对象并返回

#ifndef ABSTRACTPLUGINAPI_H
#define ABSTRACTPLUGINAPI_H
#include "AbstractPlugin.h"
#include "mainwindow.h"
// 继承抽象类
class AbstractPluginAPI : public QObject , AbstractPlugin
{
    Q_OBJECT
    // 这里 AbstractPluginAPI.json 文件用于描述 此插件的信息
    Q_PLUGIN_METADATA(IID "com.Plugin.AbstractPlugin" FILE "AbstractPluginAPI.json")
    Q_INTERFACES(AbstractPlugin)
public:
    explicit AbstractPluginAPI (QObject  *parent = nullptr) : QObject (parent){}
    QWidget *newObject() override {
        // 实现抽象方法
        // 这里是创建一个对象返回,并非返回对象本身。属于多列不是单列插件对象
        return new MainWindow();
    }
};
#endif // ABSTRACTPLUGINAPI_H

最后添加一个用于描述插件信息的json 文件 ,点击编译生成dll

此时插件开发完成 

qpluginloader,QT C++ python,qt,c++

 qpluginloader,QT C++ python,qt,c++

 qpluginloader,QT C++ python,qt,c++

 

 使用插件:

 
#include <QApplication>
#include "AbstractPlugin.h"// 抽象接口文件
#include <QPluginLoader>
#include<QWidget>
#include<QDebug>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    QPluginLoader loader("untitled.dll");
    loader.load();
     // 获取插件json文件信息
    qDebug() << loader.metaData();
 
    QObject  *plugin = loader.instance();// 实例化
    AbstractPlugin * pinterface = qobject_cast<AbstractPlugin *>(plugin);
    QWidget *p = pinterface->newObject();// 调用实现的抽象方法,实列一个对象
    QWidget *p1 = pinterface->newObject();
     p->show();
     p1->show();
    return a.exec();
}

在目前的Qt 版本中,一旦加载了插件,卸载后插件一直未得到正真的释放,所以无法对插件文件进行删除,但是可以将插件文件改名。去除.dll的后缀 在程序每次运行的时候,自动删除不是.dll的文件,即可。文章来源地址https://www.toymoban.com/news/detail-666320.html

插件的卸载。和删除插件dll 文件,

QStrin PluginPath = loader.fileName();// 获取插件所在的绝对路径位置
loader.unload();// 卸载插件
// 将插件改名,以.分割 不要后缀.dll
QFile::rename(PluginPath , PluginPath.split(".")[0]);

到了这里,关于QT QPluginLoader 插件开发 ui界面打包dll的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • IntelliJ IDE 插件开发 | (二)UI 界面与数据持久化

    IntelliJ IDE 插件开发 | (二)UI 界面与数据持久化

    IntelliJ IDE 插件开发 |(一)快速入门 IntelliJ IDE 插件开发 |(二)UI 界面与数据持久化 IntelliJ IDE 插件开发 |(三)消息通知与事件监听 IntelliJ IDE 插件开发 |(四)来查收你的 IDEA 使用报告吧 IntelliJ IDE 插件开发 |(五)VFS 与编辑器 在上一篇文章中介绍了在 IDEA 下开发、运行和

    2024年02月04日
    浏览(11)
  • QT学习开发笔记(项目实战之智能家居物联 UI 界面开发 )

    QT学习开发笔记(项目实战之智能家居物联 UI 界面开发 )

    项目路径为 4/01_smarthome/01_smarthome/01_smarthome.pro,先看项目界面。项目界面如 下,采用暗黑主题设计,结合黄色作为亮色,让用户一目了然。界面笔者从一些智能家居界面 中找到灵感的,编写设计完成的效果不错!请自行查阅源码,掌握了本教程前面第七章的内容, 就可以理

    2024年02月16日
    浏览(14)
  • 【Qt】使用Qt designer(Qt设计师)以及uic工具将ui文件转换到C++代码进行界面开发

    【Qt】使用Qt designer(Qt设计师)以及uic工具将ui文件转换到C++代码进行界面开发

    【Qt】编写第一个Qt程序,使用Cmake编译并运行 Qt Designer是一个用于创建Qt应用程序用户界面的图形化界面设计器。它是Python GUI开发的一个重要工具,可以帮助用户快速创建具有丰富功能的用户界面。 打开终端输入以下代码 点击创建 拖一些组件进来,点击保存 得到一个后缀为

    2024年02月16日
    浏览(15)
  • 【Python之Pyside】如何在pycharm中使用pyside开发编辑Qt ui界面(uic、rcc)

    【Python之Pyside】如何在pycharm中使用pyside开发编辑Qt ui界面(uic、rcc)

    qtcreator自带designer设计师编辑器,非常好用。 但是我们使用pycharm进行界面开发的时候没有designer,在pycharm中直接双击qt的ui文件会直接进行xml格式的编辑。 要在pycharm中支持双击ui文件打开qtdesigner,我们需要先 在pycharm中添加安装了pyside6的python环境,注意,安装pyqt5不支持,旧

    2024年04月12日
    浏览(16)
  • 【爬虫】python打包可执行程序(ui界面制作完成后)

    【爬虫】python打包可执行程序(ui界面制作完成后)

    终端中使用如下命令安装pyside6 在python安装目录下使用designer制作ui界面, 另存为.ui文件 终端中使用如下命令进行界面转换,将ui文件转换为py文件才能使用 pyside6-uic xxx.ui -o xxx.py 方式1: 方式2:   为各个控件写具体的交互逻辑   可能出现连接超时安装不上的情况,可以切换源

    2024年02月07日
    浏览(15)
  • Python学习笔记--exe文件打包与UI界面设计

    Python学习笔记--exe文件打包与UI界面设计

    又是半年时间过去了,终于有有时间摸鱼学一点python了。本次练习主要针对之前写过的自动打卡脚本,将其打包成exe文件,并加上UI界面。其实对于自动打卡这个功能来说,UI界面并不是必需品,加上了界面反而有些麻烦。 我比较熟悉的UI相关的库主要有 easygui,tkinter,pyqt5

    2024年02月05日
    浏览(13)
  • Qt调用主界面ui

    Qt调用主界面ui

    在其他类中使用主界面ui,this,控件操作等 首先,子类需要包含主界面的头文件和ui_xx.h文件,声明主界面类 然后使用构造函数把主界面的指针传递给子类 子类头文件: 子类cpp文件: 主界面头文件设置ui为公有: 主界面cpp文件设置: 效果图:

    2024年02月02日
    浏览(18)
  • Qt纯代码实现UI界面

    Qt纯代码实现UI界面

    设置编辑框内容的字体样式,包括加粗、下划线、斜体、蓝色、红色、黑色

    2024年01月19日
    浏览(17)
  • pyqt5超详细多进程界面设计及打包流程(UI框架建构、多线程打包、.ui.qrc文件的转.py)

    pyqt5超详细多进程界面设计及打包流程(UI框架建构、多线程打包、.ui.qrc文件的转.py)

    项目的目标是制作一个目标检测的UI界面,实现各类目标的实时检测。在制作的过程中真的遇到了数不清的坑,坑死人了。我自己梳理一下方便下次做项目还掉坑里,顺便给大伙避避坑,当然每个人遇到的情况不同,如果我遇到的问题恰好帮助你解决问题了那就太好啦。 在终

    2024年02月04日
    浏览(10)
  • 用QT实现自己的UI界面

    用QT实现自己的UI界面

    对刚入门的QT小白做一些基础知识总结,希望能帮助到你。 1,概念:QT是做UI界面的,一个跨平台的开发软件,使用QT改进了的C++语言进行开发,所以面向对象,开发效率高。 2,模块 首先要理解QT中的 信号与槽 ,sender每发送一个信号都有一个对应的槽函数来接收信号,所以

    2024年02月13日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包