Qt Gui 第二十一章

一、创建插件及添加插件

1、创建风格插件

#include <QStylePlugin>

class BronzeStylePlugin : public QStylePlugin
{
public:
    QStringList keys() const;
    QStyle *create(const QString &key);
};

继承风格插件的接口,并实现keys跟create这两个方法;

复制代码
QStringList BronzeStylePlugin::keys() const {
    return QStringList() << "Bronze";
}
QStyle *BronzeStylePlugin::create(const QString &key) {
    if (key.toLower() == "bronze")
        return new BronzeStyle;
    return 0;
}
Q_EXPORT_PLUGIN2(bronzestyleplugin, BronzeStylePlugin)
复制代码

keys为了该插件导出的时候提供的风格的名字;

当作为插件导出的时候都需要在cpp的末尾添加  : Q_EXPORT_PLUGIN2(插件的名字(自定义), 导出的类名)

在pro中,有两个不一样的地方:

TEMPLATE      = lib
CONFIG       += plugin

template如果是可执行程序则等于app,这里是作为插件的方式,所以等于lib

然后config也是增加: plugin

 

构建之后则会产生dll文件和.a文件;这两个就是最后生成的插件;

 

2、使用该插件

调用插件的方法

之前咱们使用bronzestyle风格的时候:

#include "bronzestyle.h"

然后再使用之前调用 QApplication::setStyle(new BronzeStyle);

当使用插件的方式时候,上面代码都不需要;

只需要: QApplication::setStyle("Bronze");

插件的放置位置:

方法一:将dll跟.a文件放到 plugins\styles的qt目录下面,具体的plugins在哪个位置,可以通过QApplication::libraryPaths()看到;

方法二:在.exe同目录下,新建styles目录,然后将dll跟.a文件放到styles目录下

方法三:假设我在:E:/studydata/qt/qt4src/chap21/bronze/目录下新建了一个styles目录,并将dll跟.a文件放在styles中;则可以通过QApplication::addLibraryPath("E:/studydata/qt/qt4src/chap21/bronze/");的方式指定插件的位置。(不同于默认的目录)

 

 因为该插件继承的是qtcreator的插件接口,所以增加了一个styles的目录,如果是自定义的插件,则无需增加styles目录。

 

二、动态添加插件

1、自定义插件接口,跟windows的差不多一样。不一样的地方如下红色标记的。Q_DECLARE_INTERFACE(接口的类名, 自定义的标识)

Q_DECLARE_INTERFACE(TextArtInterface, "com.software-inc.TextArt.TextArtInterface/1.0")
复制代码
class TextArtInterface {
public:
    virtual ~TextArtInterface() {}

    virtual QStringList effects() const = 0;
    virtual QPixmap applyEffect(const QString &effect,
                                const QString &text,
                                const QFont &font, const QSize &size,
                                const QPen &pen,
                                const QBrush &brush) = 0;
};
Q_DECLARE_INTERFACE(TextArtInterface,
                    "com.software-inc.TextArt.TextArtInterface/1.0")
复制代码

当要创建插件时候,如上一所描述的,只是将QStylePlugin修改成TextArtInterface接口,并实现TextArtInterface的接口即可。

 

2、动态加载插件

        QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
        if (TextArtInterface* interface = qobject_cast<TextArtInterface*>(loader.instance()))
                        。
                        。
                        。

如上所示,将dll文件(windows)加载进来,然后通过强转判断是否强转成功。如果成功则可以进行接下去的操作。

 

posted @   LCAC  阅读(185)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示