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

Reply via email to