📄 qresource.cpp
字号:
QStringList QResourceInfo::children() const{ if(!container || related.isEmpty()) return QStringList(); if(!hasChildren) { hasChildren = true; QString path = searchFile; if(path.startsWith(QLatin1Char(':'))) path = path.mid(1); QSet<QString> kids; for(int i = 0; i < related.size(); ++i) { QStringList related_children = related.at(i).children(path); for(int kid = 0; kid < related_children.size(); ++kid) { QString k = related_children.at(kid); if(!kids.contains(k)) { mChildren += k; kids.insert(k); } } } } return mChildren;}Q_CORE_EXPORT bool qRegisterResourceData(int version, const unsigned char *tree, const unsigned char *name, const unsigned char *data){ if(version == 0x01 && resourceList()) { QResource res(tree, name, data); if (!resourceList()->contains(res)) resourceList()->append(res); return true; } return false;}Q_CORE_EXPORT bool qUnregisterResourceData(int version, const unsigned char *tree, const unsigned char *name, const unsigned char *data){ if(version == 0x01 && resourceList()) { QResource res(tree, name, data); for(int i = 0; i < resourceList()->size(); ) { if(resourceList()->at(i) == res) resourceList()->remove(i); else ++i; } return true; } return false;}//file type handlerclass QResourceFileEngineHandler : public QAbstractFileEngineHandler{public: QResourceFileEngineHandler() { } ~QResourceFileEngineHandler() { } QAbstractFileEngine *create(const QString &path) const;};QAbstractFileEngine *QResourceFileEngineHandler::create(const QString &path) const{ if (path.size() > 0 && path.startsWith(QLatin1Char(':'))) return new QResourceFileEngine(path); return 0;}//resource engineclass QResourceFileEnginePrivate : public QAbstractFileEnginePrivate{protected: Q_DECLARE_PUBLIC(QResourceFileEngine)private: qint64 offset; QResourceInfo resource;protected: QResourceFileEnginePrivate() : offset(0) { }};bool QResourceFileEngine::mkdir(const QString &, bool) const{ return false;}bool QResourceFileEngine::rmdir(const QString &, bool) const{ return false;}bool QResourceFileEngine::setSize(qint64){ return false;}QStringList QResourceFileEngine::entryList(QDir::Filters filters, const QStringList &filterNames) const{ Q_D(const QResourceFileEngine); const bool doDirs = (filters & QDir::Dirs) != 0; const bool doFiles = (filters & QDir::Files) != 0; const bool doReadable = (filters & QDir::Readable) != 0; QStringList ret; if((!doDirs && !doFiles) || ((filters & QDir::PermissionMask) && !doReadable)) return ret; if(!d->resource.exists() || !d->resource.isContainer()) return ret; // cannot read the "directory" QStringList entries = d->resource.children(); for(int i = 0; i < entries.size(); i++) { QResourceInfo entry(d->resource.fileName() + "/" + entries[i]);#ifndef QT_NO_REGEXP if(!(filters & QDir::AllDirs && entry.isContainer())) { bool matched = false; for(QStringList::ConstIterator sit = filterNames.begin(); sit != filterNames.end(); ++sit) { QRegExp rx(*sit, (filters & QDir::CaseSensitive) ? Qt::CaseSensitive : Qt::CaseInsensitive, QRegExp::Wildcard); if (rx.exactMatch(entries[i])) { matched = true; break; } } if(!matched) continue; }#endif if ((doDirs && entry.isContainer()) || (doFiles && !entry.isContainer())) ret.append(entries[i]); } return ret;}bool QResourceFileEngine::caseSensitive() const{ return true;}QResourceFileEngine::QResourceFileEngine(const QString &file) : QAbstractFileEngine(*new QResourceFileEnginePrivate){ Q_D(QResourceFileEngine); d->resource.setFileName(file);}QResourceFileEngine::~QResourceFileEngine(){}void QResourceFileEngine::setFileName(const QString &file){ Q_D(QResourceFileEngine); d->resource.setFileName(file);}bool QResourceFileEngine::open(QIODevice::OpenMode flags){ Q_D(QResourceFileEngine); if (d->resource.fileName().isEmpty()) { qWarning("QFSFileEngine::open: No file name specified"); return false; } if(flags & QIODevice::WriteOnly) return false; if(!d->resource.exists()) return false; return true;}bool QResourceFileEngine::close(){ Q_D(QResourceFileEngine); d->offset = 0; return true;}bool QResourceFileEngine::flush(){ return false;}qint64 QResourceFileEngine::read(char *data, qint64 len){ Q_D(QResourceFileEngine); if(len > d->resource.data().size()-d->offset) len = d->resource.data().size()-d->offset; if(len <= 0) return 0; memcpy(data, d->resource.data().constData()+d->offset, len); d->offset += len; return len;}qint64 QResourceFileEngine::write(const char *, qint64){ return -1;}bool QResourceFileEngine::remove(){ return false;}bool QResourceFileEngine::copy(const QString &){ return false;}bool QResourceFileEngine::rename(const QString &){ return false;}bool QResourceFileEngine::link(const QString &){ return false;}qint64 QResourceFileEngine::size() const{ Q_D(const QResourceFileEngine); if(!d->resource.exists()) return 0; return d->resource.data().size();}qint64 QResourceFileEngine::pos() const{ Q_D(const QResourceFileEngine); return d->offset;}bool QResourceFileEngine::atEnd() const{ Q_D(const QResourceFileEngine); if(!d->resource.exists()) return true; return d->offset == d->resource.data().size();}bool QResourceFileEngine::seek(qint64 pos){ Q_D(QResourceFileEngine); if(!d->resource.exists()) return false; if(d->offset > d->resource.data().size()) return false; d->offset = pos; return true;}bool QResourceFileEngine::isSequential() const{ return false;}QAbstractFileEngine::FileFlags QResourceFileEngine::fileFlags(QAbstractFileEngine::FileFlags type) const{ Q_D(const QResourceFileEngine); QAbstractFileEngine::FileFlags ret = 0; if(!d->resource.exists()) return ret; if(type & PermsMask) ret |= QAbstractFileEngine::FileFlags(ReadOwnerPerm|ReadUserPerm|ReadGroupPerm|ReadOtherPerm); if(type & TypesMask) { if(d->resource.isContainer()) ret |= DirectoryType; else ret |= FileType; } if(type & FlagsMask) { ret |= ExistsFlag; if(d->resource.fileName() == QLatin1String(":/")) ret |= RootFlag; } return ret;}bool QResourceFileEngine::setPermissions(uint){ return false;}QString QResourceFileEngine::fileName(FileName file) const{ Q_D(const QResourceFileEngine); if(file == BaseName) { int slash = d->resource.fileName().lastIndexOf(QLatin1Char('/')); if (slash == -1) return d->resource.fileName(); return d->resource.fileName().mid(slash + 1); } else if(file == PathName || file == AbsolutePathName) { const int slash = d->resource.fileName().lastIndexOf(QLatin1Char('/')); if (slash != -1) return d->resource.fileName().left(slash); } else if(file == CanonicalName || file == CanonicalPathName) { const QString canonicalPath = d->resource.searchFileName(); if(file == CanonicalPathName) { const int slash = canonicalPath.lastIndexOf(QLatin1Char('/')); if (slash != -1) return canonicalPath.left(slash); } return canonicalPath; } return d->resource.fileName();}bool QResourceFileEngine::isRelativePath() const{ return false;}uint QResourceFileEngine::ownerId(FileOwner) const{ static const uint nobodyID = (uint) -2; return nobodyID;}QString QResourceFileEngine::owner(FileOwner) const{ return QString();}QDateTime QResourceFileEngine::fileTime(FileTime) const{ return QDateTime();}bool QResourceFileEngine::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output){ Q_UNUSED(extension); Q_UNUSED(option); Q_UNUSED(output); return false;}bool QResourceFileEngine::supportsExtension(Extension extension) const{ Q_UNUSED(extension); return false;}//Initialization and cleanupQ_GLOBAL_STATIC(QResourceFileEngineHandler, resource_file_handler)static int qt_force_resource_init() { resource_file_handler(); return 1; }Q_CORE_EXPORT void qInitResourceIO() { resource_file_handler(); }static int qt_forced_resource_init = qt_force_resource_init();Q_CONSTRUCTOR_FUNCTION(qt_force_resource_init)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -