如何以编程方式在OS X上设置文件图标?

时间:2016-07-20 17:20:44

标签: macos qt qt5

从图片开始 - QImageQPixmap,如何将其设置为给定文件上的取景器图标?您可以通过将图像拖动到任何文件的“获取信息”窗格来手动执行此操作。据推测,该图标保存在该文件的资源分配中。

1 个答案:

答案 0 :(得分:0)

这是一个完整的例子。运行时,它会要求您提供一个文件来更改图标,然后将图标设置为带有蓝色轮廓的黄色圆圈。

main.mm

// https://github.com/KubaO/stackoverflown/tree/master/questions/file-icon-set-38486934
#include <QtWidgets>
#include <QtMacExtras>
#include <AppKit/AppKit.h>

QPixmap circle() {
   QPixmap pix{128, 128};
   pix.fill(Qt::transparent);
   QPainter p{&pix};
   p.setBrush(Qt::yellow);
   p.setPen(QPen{Qt::blue, 3});
   p.drawEllipse(pix.rect());
   return pix;
}

int main(int argc, char ** argv) {
   QApplication app{argc, argv};
   auto path = QFileDialog::getOpenFileName(nullptr, "Select File");
   if (! path.isEmpty()) {
      auto image = QtMac::toNSImage(circle());
      auto filePath = path.toNSString();
      [[NSWorkspace sharedWorkspace] setIcon:image forFile:filePath options:0];
      [filePath release];
      [image release];
   }
   return 0;
}

file-icon-set-3846934.pro

QT = widgets macextras
CONFIG += c++11
TARGET = file-icon-set-38486934
TEMPLATE = app
OBJECTIVE_SOURCES += main.mm
LIBS += -framework AppKit