08 const QByteArray &format) const;
09 };
Функция
01 QStringList CursorPlugin::keys const
02 {
03 return QStringList << "cur";
04 }
Наш подключаемый модуль поддерживает один формат изображений, поэтому возвращается список, содержащий только одно название. В идеале это название должно совпадать с расширением файла, используемым данным форматом. Если форматы имеют несколько расширений (например,
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;