在为iOS开发本机应用程序时,iOS软件开发工具包的特性如下:
[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd ...] autorelease];这些是原生图标操作系统图标,还有several of them。我还没有开发任何android应用程序,但我猜android SDK也提供了类似的功能。
现在的问题是,当使用QT开发跨平台应用程序时,是否可以在QT/QML中引用这些本地系统图标?
使用这些标准的系统图标,在应用程序中保留原生的感觉,而不是为标准用例提供自定义的应用程序图标,这将是非常棒的。
发布于 2021-05-26 21:22:16
根据通用汽车的评论,我使用了QQuickImageProvider,不知道这是否适用于安卓系统。不幸的是,它使用的是QApplication而不是QGuiApplication,否则就不可能通过style()获得QStyle。因此,需要将widgets添加为一个库。
main.cpp
#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" }
}
}

https://stackoverflow.com/questions/67669831
复制相似问题