簡體   English   中英

訪問 QT / QML 中的系統圖標

[英]Access to system icons in QT / QML

在為 iOS 開發本機應用程序時,iOS SDK 具有以下功能:

[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd ...] autorelease];

這些是本機圖標 OS 圖標,其中有幾個 我還沒有開發任何 android 應用程序,但我猜 android SDK 提供了類似的功能。

現在的問題是,在使用 QT 開發跨平台應用程序時,是否可以在 QT/QML 中引用那些原生系統圖標?

使用那些標准系統圖標,在應用程序中保留原生感覺,而不是為標准用例提供自定義應用程序圖標,這將是非常棒的。

跟進 GM 的評論,我使用了QQuickImageProvider ,不知道這是否適用於 Android。 不幸的是,它使用QApplication而不是QGuiApplication ,否則無法通過style()獲得QStyle 因此,需要將widgets添加為庫。

主文件

#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

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" }
    }
}

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM