• QT 样式插件示例


    QT 样式插件示例

    样式插件示例

    这个例子展示了如何创建一个扩展 Qt 并具有新的 GUI 外观的插件。

    Qt 中的插件是存储在共享库中的类,可以在运行时由QPluginLoader加载。在 Qt 中创建插件时,它们要么扩展 Qt 应用程序,要么扩展 Qt 本身。编写扩展 Qt 本身的插件是通过继承插件基类之一、从该类重新实现函数并添加宏来实现的。在这个例子中,我们通过添加新的 GUI 外观和感觉来扩展 Qt(即,使新的QStyle可用)。插件概述文档中给出了对插件的高级介绍。

    提供新样式的插件继承QStylePlugin基类。样式插件由 Qt 加载并通过QStyleFactory提供;我们稍后再看。我们已经实施SimpleStylePlugin,它提供了SimpleStyle. 新样式通过将按钮背景绘制为红色来为小部件样式做出贡献——这不是主要贡献,但它仍然是一种新样式。

    新样式与平台无关,因为它不基于任何特定样式实现,而是使用QStyleFactory仅调整默认为本机系统样式的当前应用程序样式中的外观。

    注意:在某些平台上,原生样式会阻止按钮具有红色背景。在这种情况下,请尝试以另一种方式运行示例(例如,融合)。

    我们用 测试插件StyleWindow,在其中我们显示一个QPushButton。和SimpleStyleStyleWindow不包含任何插件特定的功能,它们的实现是微不足道的;因此,我们将跳过它们并继续使用SimpleStylePluginmain()函数。在我们看过之后,我们检查插件的配置文件。

    SimpleStylePlugin 类定义

    SimpleStylePlugin继承QStylePlugin,是插件类。

    class SimpleStylePlugin : public QStylePlugin
    {
        Q_OBJECT
        Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QStyleFactoryInterface" FILE "simplestyle.json")
    
    public:
        SimpleStylePlugin() = default;
    
        QStringList keys() const;
        QStyle *create(const QString &key) override;
    };

    keys()返回此插件可以创建的样式名称列表,同时create()采用这样的字符串并返回与键对应的QStyle 。这两个函数都是从QStylePlugin重新实现的纯虚函数。当应用程序请求该插件创建的SimpleStyle样式实例时,Qt 将使用该插件创建它。

    SimpleStylePlugin 类实现

    QStringList SimpleStylePlugin::keys() const
    {
        return {"SimpleStyle"};
    }

    由于这个插件只支持一种样式,我们返回一个带有该样式类名的QStringList 。

    这是create()功能:

    QStyle *SimpleStylePlugin::create(const QString &key)
    {
        if (key.toLower() == "simplestyle")
            return new SimpleStyle;
        return nullptr;
    }

    请注意,样式插件的键不区分大小写。区分大小写因插件而异,因此在实施新插件时需要检查这一点

    int main(int argv, char *args[])
    {
        QApplication app(argv, args);
        QApplication::setStyle(QStyleFactory::create("simplestyle"));
    
        StyleWindow window;
        window.resize(200, 50);
        window.show();
    
        return app.exec();
    }

    Qt 在初始化QApplication对象时加载可用的样式插件。QStyleFactory类知道所有样式并使用 create() 生成它们是所有样式插件的包装器)。

    简单样式插件配置文件

    TEMPLATE    = lib
    CONFIG     += plugin
    QT         += widgets
    HEADERS     = simplestyle.h \
                  simplestyleplugin.h
    SOURCES     = simplestyle.cpp \
                  simplestyleplugin.cpp
    TARGET      = simplestyleplugin

    在插件配置文件中,我们需要设置 lib 模板,因为我们正在构建共享库而不是可执行文件。我们还必须将配置设置为插件。我们将库设置为存储在 stylewindow 下的样式文件夹中,因为这是 Qt 搜索样式插件的路径。

  • 相关阅读:
    QClipboard
    【JavaEE】初识计算机网络(TCP/IP五层模型及封装和分用)
    斗地主案例及一些实现规则
    The 19th Zhejiang Provincial Collegiate Programming Contest
    自动拉取推送代码到git仓库脚本
    CAD二次开发LineSegment2d
    自然语言处理从零到入门 Transformer
    【力扣10天SQL入门】Day4 组合查询 & 指定选取
    Django ModelForm中使用钩子函数校验数据
    神经网络正则化技术防过拟合和R语言CNN卷积神经网络手写数字图像数据MNIST分类
  • 原文地址:https://blog.csdn.net/wjffsx/article/details/127070092