QT 样式插件示例

1 篇文章 0 订阅
1 篇文章 0 订阅

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 搜索样式插件的路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值