Hi all,
I'm trying to use QAbstractFileEngine in PySide, but i'm getting a crash. I've
attached the example C++ program and the equivalent PySide code. The output of
both programs should be the same.
The version of PySide that I use is 1.0.0 on x86_64 (Fedora).
Best regards,
Jos
#include <QtCore/QAbstractFileEngineHandler>
#include <QtCore/QAbstractFileEngine>
#include <QtCore/QDateTime>
#include <QtCore/QDebug>
class TestFSIterator : public QAbstractFileEngineIterator {
private:
int index;
QStringList list;
public:
TestFSIterator(const QString& parent, QDir::Filters filters,
const QStringList & filterNames)
:QAbstractFileEngineIterator(filters, filterNames),
index(-1) {
list << ".." << ".";
if (parent == "/bup") {
list << "A" << "B" << "C";
}
}
QString next() {
index++;
return currentFileName();
}
bool hasNext() const {
return index + 1 < list.size();
}
QString currentFileName() const {
return (index < list.size()) ?list[index] :QString();
}
};
class TestFS : public QAbstractFileEngine {
private:
QString path;
public:
TestFS(const QString& path) :QAbstractFileEngine() {
this->path = path;
}
~TestFS() {
}
Iterator* beginEntryList (QDir::Filters filters, const QStringList & filterNames ) {
qDebug() << "beginEntryList";
return new TestFSIterator(path, filters, filterNames);
}
virtual FileFlags fileFlags (FileFlags type = FileInfoAll ) const {
FileFlags flags = ExistsFlag | ReadOwnerPerm | ReadUserPerm |
ReadGroupPerm | ReadOtherPerm | DirectoryType;
return flags;
}
virtual QString fileName (FileName file = DefaultName ) const {
QString name;
switch (file) {
case DefaultName:
name = path;
break;
case BaseName:
name = path.section('/', -1);
break;
}
return name;
}
virtual void setFileName(const QString & file) {
path = file;
}
};
class TestFSHandler : public QAbstractFileEngineHandler {
public:
TestFSHandler() :QAbstractFileEngineHandler() {
}
QAbstractFileEngine* create(const QString& path) const {
return path.startsWith("/bup") ?new TestFS(path) :NULL;
}
};
int
main() {
TestFSHandler testfshandler;
QDir d("/bup");
foreach(const QString& name, d.entryList()) {
qDebug() << name;
}
qDebug() << "entryList: " + QString::number(d.entryList().size());
return 0;
}
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PySide.QtCore import QAbstractFileEngineIterator, QAbstractFileEngine, QAbstractFileEngineHandler, QDir
class TestFSIterator(QAbstractFileEngineIterator):
def __init__(self, parent, filters, filterNames):
QAbstractFileEngineIterator.__init__(self, filters, filterNames)
self.index = -1
if parent == "/bup":
self.list = ['.', '..', 'A', 'B', 'C']
else:
self.list = ['.', '..']
def next(self):
self.index += 1
return self.currentFileName()
def hasNext(self):
return index + 1 < len(list)
def currentFileName(self):
if index < len(list):
return list[index]
return None
class TestFS(QAbstractFileEngine):
def __init__(self, path):
QAbstractFileEngine.__init__(self)
self.path = path
def beginEntryList(self, filters, filterNames):
print "beginEntryList"
return TestFSIterator(self.path, filters, filterNames)
def fileFlags(self, type = QAbstractFileEngine.FileInfoAll):
flags = ExistsFlag | ReadOwnerPerm | ReadUserPerm | ReadGroupPerm | ReadOtherPerm | DirectoryType
return flags
def fileName(self, file = QAbstractFileEngine.DefaultName):
if file == QAbstractFileEngine.DefaultName:
return self.path
return self.path.section('/', -1)
def setFileName(self, file):
self.path = file
class TestFSHandler(QAbstractFileEngineHandler):
def __init__(self):
QAbstractFileEngineHandler.__init__(self)
def create(self, path):
if path[0:4] == "/bup":
return TestFS(path)
return None
testfshandler = TestFSHandler()
d = QDir("/bup")
for name in d.entryList():
print name
print "entryList: " + str(len(d.entryList()))
_______________________________________________
PySide mailing list
[email protected]
http://lists.pyside.org/listinfo/pyside