如何在 MacOS 上获取文件类型的图标?

Posted

技术标签:

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

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

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

【问题讨论】:

解决方案对您有用吗? 【参考方案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();

【讨论】:

以上是关于如何在 MacOS 上获取文件类型的图标?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PyQt/PySide 获取与特定文件类型关联的图标?

如何在Windows中检索任何给定文件类型的默认图标?

如何让macos将文档包视为文件?

delphi 动态获取文件类型的图标

macOS tkinter:askopenfilename 的文件类型如何工作

如何在给定文件扩展名的情况下获取 Qt 图标(QIcon)