Наш подключаемый модуль поддерживает один формат изображений, поэтому возвращается список, содержащий только одно название. В идеале это название должно совпадать с расширением файла, используемым данным форматом. Если форматы имеют несколько расширений (например,
01 QImageIOPlugin::Capabilities
02 CursorPlugin::capabilities(QIODevice *device,
03 const QByteArray &format) const
04 {
05 if (format == "cur")
06 return CanRead;
07 if (format.isEmpty()) {
08 CursorHandler handler;
09 handler.setDevice(device);
10 if (handler.canRead())
11 return CanRead;
12 }
13 return 0;
14 }
Функция
Если формат «cur», наша реализация возвращает
01 QImageIOHandler *CursorPlugin::create(QIODevice *device,
02 const QByteArray &format) const
03 {
04 CursorHandler *handler = new CursorHandler;
05 handler->setDevice(device);
06 handler->setFormat(format);
07 return handler;
08 }
Когда файл курсора открыт (например, с помощью класса
Q_EXPORT_PLUGIN2(cursorplugin, CursorPlugin)
В конце файла
Подкласс
01 class CursorHandler : public QImageIOHandler
02 {
03 public:
04 CursorHandler();
05 bool canRead() const;
06 bool read(QImage *image);
07 bool jumpToNextImage();
08 int currentImageNumber() const;
09 int imageCount() const;
10 private:
11 enum State { BeforeHeader, BeforeImage, AfterLastImage, Error };
12 void readHeaderIfNecessary() const;
13 QBitArray readBitmap(int width, int height, QDataStream ∈) const;
14 void enterErrorState() const;
15 mutable State state;
16 mutable int currentImageNo;
17 mutable int numImages;
18 };