首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QT / QML中访问系统图标

在QT / QML中访问系统图标
EN

Stack Overflow用户
提问于 2021-05-24 17:41:41
回答 1查看 242关注 0票数 1

在为iOS开发本机应用程序时,iOS软件开发工具包的特性如下:

代码语言:javascript
复制
[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd ...] autorelease];

这些是原生图标操作系统图标,还有several of them。我还没有开发任何android应用程序,但我猜android SDK也提供了类似的功能。

现在的问题是,当使用QT开发跨平台应用程序时,是否可以在QT/QML中引用这些本地系统图标?

使用这些标准的系统图标,在应用程序中保留原生的感觉,而不是为标准用例提供自定义的应用程序图标,这将是非常棒的。

EN

回答 1

Stack Overflow用户

发布于 2021-05-26 21:22:16

根据通用汽车的评论,我使用了QQuickImageProvider,不知道这是否适用于安卓系统。不幸的是,它使用的是QApplication而不是QGuiApplication,否则就不可能通过style()获得QStyle。因此,需要将widgets添加为一个库。

main.cpp

代码语言:javascript
复制
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQuickImageProvider>
#include <QStyle>

class StandardIconProvider : public QQuickImageProvider
{
public:
    StandardIconProvider(QStyle *style)
        : QQuickImageProvider(Pixmap)
        , m_style(style)
    {}

    QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override
    {
        Q_UNUSED(size)
        static const auto metaobject = QMetaEnum::fromType<QStyle::StandardPixmap>();
        const int value = metaobject.keyToValue(id.toLatin1());
        QIcon icon = m_style->standardIcon(static_cast<QStyle::StandardPixmap>(value));
        return icon.pixmap(requestedSize);
    }

    QStyle *m_style;
};

int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif

    QApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.addImageProvider(QLatin1String("standardicons"), new StandardIconProvider(app.style()));

    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

main.qml

代码语言:javascript
复制
import QtQuick 2.15
import QtQuick.Window 2.15

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Standard Icon Provider demo")

    component Icon: Image {
        width: 64
        height: 64
        sourceSize: Qt.size(64, 64)
    }

    Grid {
        columns: 3
        rows: 3
        spacing: 10
        anchors.centerIn: parent

        Icon { source: "image://standardicons/SP_TrashIcon" }
        Icon { source: "image://standardicons/SP_MessageBoxCritical" }
        Icon { source: "image://standardicons/SP_DirHomeIcon" }
        Icon { source: "image://standardicons/SP_DirClosedIcon" }
        Icon { source: "image://standardicons/SP_ArrowUp" }
        Icon { source: "image://standardicons/SP_DialogHelpButton" }
        Icon { source: "image://standardicons/SP_BrowserStop" }
        Icon { source: "image://standardicons/SP_FileLinkIcon" }
        Icon { source: "image://standardicons/SP_DialogSaveButton" }
    }
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67669831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档