[英]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.