本文整理汇总了C++中QFactoryLoader::keyMap方法的典型用法代码示例。如果您正苦于以下问题:C++ QFactoryLoader::keyMap方法的具体用法?C++ QFactoryLoader::keyMap怎么用?C++ QFactoryLoader::keyMap使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QFactoryLoader
的用法示例。
在下文中一共展示了QFactoryLoader::keyMap方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: locker
static QImageIOHandler *createReadHandlerHelper(QIODevice *device,
const QByteArray &format,
bool autoDetectImageFormat,
bool ignoresFormatAndExtension)
{
if (!autoDetectImageFormat && format.isEmpty())
return 0;
QByteArray form = format.toLower();
QImageIOHandler *handler = 0;
QByteArray suffix;
#ifndef QT_NO_IMAGEFORMATPLUGIN
static QMutex mutex;
QMutexLocker locker(&mutex);
typedef QMultiMap<int, QString> PluginKeyMap;
// check if we have plugins that support the image format
QFactoryLoader *l = loader();
const PluginKeyMap keyMap = l->keyMap();
#ifdef QIMAGEREADER_DEBUG
qDebug() << "QImageReader::createReadHandler( device =" << (void *)device << ", format =" << format << "),"
<< keyMap.values().size() << "plugins available: " << keyMap.values();
#endif
int suffixPluginIndex = -1;
#endif // QT_NO_IMAGEFORMATPLUGIN
if (device && format.isEmpty() && autoDetectImageFormat && !ignoresFormatAndExtension) {
// if there's no format, see if \a device is a file, and if so, find
// the file suffix and find support for that format among our plugins.
// this allows plugins to override our built-in handlers.
if (QFile *file = qobject_cast<QFile *>(device)) {
#ifdef QIMAGEREADER_DEBUG
qDebug() << "QImageReader::createReadHandler: device is a file:" << file->fileName();
#endif
if (!(suffix = QFileInfo(file->fileName()).suffix().toLower().toLatin1()).isEmpty()) {
#ifndef QT_NO_IMAGEFORMATPLUGIN
const int index = keyMap.key(QString::fromLatin1(suffix), -1);
if (index != -1) {
#ifdef QIMAGEREADER_DEBUG
qDebug() << "QImageReader::createReadHandler: suffix recognized; the"
<< suffix << "plugin might be able to read this";
#endif
suffixPluginIndex = index;
}
#endif // QT_NO_IMAGEFORMATPLUGIN
}
}
}
QByteArray testFormat = !form.isEmpty() ? form : suffix;
if (ignoresFormatAndExtension)
testFormat = QByteArray();
#ifndef QT_NO_IMAGEFORMATPLUGIN
if (suffixPluginIndex != -1) {
// check if the plugin that claims support for this format can load
// from this device with this format.
const qint64 pos = device ? device->pos() : 0;
const int index = keyMap.key(QString::fromLatin1(suffix), -1);
if (index != -1) {
QImageIOPlugin *plugin = qobject_cast<QImageIOPlugin *>(l->instance(index));
if (plugin && plugin->capabilities(device, testFormat) & QImageIOPlugin::CanRead) {
handler = plugin->create(device, testFormat);
#ifdef QIMAGEREADER_DEBUG
qDebug() << "QImageReader::createReadHandler: using the" << suffix
<< "plugin";
#endif
}
}
if (device && !device->isSequential())
device->seek(pos);
}
if (!handler && !testFormat.isEmpty() && !ignoresFormatAndExtension) {
// check if any plugin supports the format (they are not allowed to
// read from the device yet).
const qint64 pos = device ? device->pos() : 0;
if (autoDetectImageFormat) {
const int keyCount = keyMap.keys().size();
for (int i = 0; i < keyCount; ++i) {
if (i != suffixPluginIndex) {
QImageIOPlugin *plugin = qobject_cast<QImageIOPlugin *>(l->instance(i));
if (plugin && plugin->capabilities(device, testFormat) & QImageIOPlugin::CanRead) {
#ifdef QIMAGEREADER_DEBUG
qDebug() << "QImageReader::createReadHandler: the" << keyMap.keys().at(i) << "plugin can read this format";
#endif
handler = plugin->create(device, testFormat);
break;
}
}
}
} else {
const int testIndex = keyMap.key(QLatin1String(testFormat), -1);
if (testIndex != -1) {
//.........这里部分代码省略.........
示例2: loader
static QImageIOHandler *createWriteHandlerHelper(QIODevice *device,
const QByteArray &format)
{
QByteArray form = format.toLower();
QByteArray suffix;
QImageIOHandler *handler = 0;
#ifndef QT_NO_IMAGEFORMATPLUGIN
typedef QMultiMap<int, QString> PluginKeyMap;
// check if any plugins can write the image
QFactoryLoader *l = loader();
const PluginKeyMap keyMap = l->keyMap();
int suffixPluginIndex = -1;
#endif
if (device && format.isEmpty()) {
// if there's no format, see if \a device is a file, and if so, find
// the file suffix and find support for that format among our plugins.
// this allows plugins to override our built-in handlers.
if (QFile *file = qobject_cast<QFile *>(device)) {
if (!(suffix = QFileInfo(file->fileName()).suffix().toLower().toLatin1()).isEmpty()) {
#ifndef QT_NO_IMAGEFORMATPLUGIN
const int index = keyMap.key(QString::fromLatin1(suffix), -1);
if (index != -1)
suffixPluginIndex = index;
#endif
}
}
}
QByteArray testFormat = !form.isEmpty() ? form : suffix;
#ifndef QT_NO_IMAGEFORMATPLUGIN
if (suffixPluginIndex != -1) {
// when format is missing, check if we can find a plugin for the
// suffix.
const int index = keyMap.key(QString::fromLatin1(suffix), -1);
if (index != -1) {
QImageIOPlugin *plugin = qobject_cast<QImageIOPlugin *>(l->instance(index));
if (plugin && (plugin->capabilities(device, suffix) & QImageIOPlugin::CanWrite))
handler = plugin->create(device, suffix);
}
}
#endif // QT_NO_IMAGEFORMATPLUGIN
// check if any built-in handlers can write the image
if (!handler && !testFormat.isEmpty()) {
if (false) {
#ifndef QT_NO_IMAGEFORMAT_PNG
} else if (testFormat == "png") {
handler = new QPngHandler;
#endif
#ifndef QT_NO_IMAGEFORMAT_JPEG
} else if (testFormat == "jpg" || testFormat == "jpeg") {
handler = new QJpegHandler;
#endif
#ifdef QT_BUILTIN_GIF_READER
} else if (testFormat == "gif") {
handler = new QGifHandler;
#endif
#ifndef QT_NO_IMAGEFORMAT_BMP
} else if (testFormat == "bmp") {
handler = new QBmpHandler;
} else if (testFormat == "dib") {
handler = new QBmpHandler(QBmpHandler::DibFormat);
#endif
#ifndef QT_NO_IMAGEFORMAT_XPM
} else if (testFormat == "xpm") {
handler = new QXpmHandler;
#endif
#ifndef QT_NO_IMAGEFORMAT_XBM
} else if (testFormat == "xbm") {
handler = new QXbmHandler;
handler->setOption(QImageIOHandler::SubType, testFormat);
#endif
#ifndef QT_NO_IMAGEFORMAT_PPM
} else if (testFormat == "pbm" || testFormat == "pbmraw" || testFormat == "pgm"
|| testFormat == "pgmraw" || testFormat == "ppm" || testFormat == "ppmraw") {
handler = new QPpmHandler;
handler->setOption(QImageIOHandler::SubType, testFormat);
#endif
}
}
#ifndef QT_NO_IMAGEFORMATPLUGIN
if (!testFormat.isEmpty()) {
const int keyCount = keyMap.keys().size();
for (int i = 0; i < keyCount; ++i) {
QImageIOPlugin *plugin = qobject_cast<QImageIOPlugin *>(l->instance(i));
if (plugin && (plugin->capabilities(device, testFormat) & QImageIOPlugin::CanWrite)) {
delete handler;
handler = plugin->create(device, testFormat);
break;
}
}
}
#endif // QT_NO_IMAGEFORMATPLUGIN
if (!handler)
//.........这里部分代码省略.........