【问题标题】:How to get the icon for a file type on MacOS?如何在 MacOS 上获取文件类型的图标?
【发布时间】:2021-12-19 11:37:16
【问题描述】:

在 Linux 上,我可以使用这个管道 QMimeDatabase::mimeTypeForFile > QMimeType::iconName > QIcon::fromTheme 来获取文件的图标。 Afaik 后者仅适用于 Linux。

如何在 macOS 上获取 mimetype 的图标?我必须使用icon(for:) 并自己创建像素图,还是有更好的方法?

【问题讨论】:

  • 解决方案对您有用吗?

标签: c++ macos qt icons


【解决方案1】:

解决方案

要获取文件的图标,请使用 QFileIconProvider::iconQFileInfo,如下所示:

QIcon fileIcon = QFileIconProvider().icon(QFileInfo(fileName));

示例

这是我为您编写的一个简单示例,用于演示建议的解决方案:

#include <QApplication>
#include <QFileIconProvider>
#include <QFileDialog>
#include <QFileInfo>
#include <QBoxLayout>
#include <QPushButton>

class Widget : public QWidget
{
public:
    Widget(QWidget *parent = nullptr) : QWidget(parent) {
        auto *l = new QVBoxLayout(this);
        auto *btnOpen = new QPushButton(tr("Open File"), this);

        btnOpen->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

        l->addWidget(btnOpen);

        connect(btnOpen, &QPushButton::clicked, this, &Widget::onFileOpen);

        resize(300, 300);
    }

private slots:
    void onFileOpen() {
        const QString &fileName(QFileDialog::getOpenFileName(this, tr("Open File")));

        if (fileName.isEmpty())
            return;

        auto *btnOpen = static_cast<QPushButton *>(sender());

        btnOpen->setIcon(QFileIconProvider().icon(QFileInfo(fileName)));
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多