QAbstractFileEngine и QDirModel.
Есть в QT замечательная штука под названием QAbstractFileEngine. В двух словах это заготовка для построения VFS в отдельно взятой программе. Вот цитата из документации:
A QAbstractFileEngine subclass can be created to do synchronous network I/O based file system operations, local file system operations, or to operate as a resource system to access file based resources.
Собственно все операции с файлами (open, read, write, etc) идут именно через потомка этого класса QFSFileEngine. Также этот механизм используется для доступа к ресурсам (да-да, тот самый QIcon(":/icons/icon.png")).
Таким образом создав 3 класса
class MyFileEngineHandler : public QAbstractFileEngineHandler
class MyFileEngine: public QAbstractFileEngine
class MyFileEngineIterator : public QAbstractFileEngineIterator
мы получаем собственноручно созданную VFS для наших нужд. В процессе экспериментов я создал VFS для отображения структуры базы данных.
sql:/localhost/dbname/table_name/columns.txt
Работает!
Теперь немного критики.
1) (не шибко критичное) Выбор реализации QAbstractFileEngine происходит чеерз цепочку QAbstractFileEngineHandler куда передаётся имя файла как QString. Вероятно было бы не плохо задействовать для этих целей QUrl.
2) QDirModel не поддерживает эту систему. Вернее обращение всегда происходит через QFSFileEngine. Таким образом без внедрения в QT решить проблему не получится.
A QAbstractFileEngine subclass can be created to do synchronous network I/O based file system operations, local file system operations, or to operate as a resource system to access file based resources.
Собственно все операции с файлами (open, read, write, etc) идут именно через потомка этого класса QFSFileEngine. Также этот механизм используется для доступа к ресурсам (да-да, тот самый QIcon(":/icons/icon.png")).
Таким образом создав 3 класса
class MyFileEngineHandler : public QAbstractFileEngineHandler
class MyFileEngine: public QAbstractFileEngine
class MyFileEngineIterator : public QAbstractFileEngineIterator
мы получаем собственноручно созданную VFS для наших нужд. В процессе экспериментов я создал VFS для отображения структуры базы данных.
sql:/localhost/dbname/table_name/columns.txt
Работает!
Теперь немного критики.
1) (не шибко критичное) Выбор реализации QAbstractFileEngine происходит чеерз цепочку QAbstractFileEngineHandler куда передаётся имя файла как QString. Вероятно было бы не плохо задействовать для этих целей QUrl.
2) QDirModel не поддерживает эту систему. Вернее обращение всегда происходит через QFSFileEngine. Таким образом без внедрения в QT решить проблему не получится.
Комментарии: 4:
А если не трудно, можно пример использования ? :)
А если не трудно, можно пример использования ? :)
А если не сложно, можно пример использования QAbstractFileEngine?
Да, примерчик плиз. Я тут именно из-за этого)
Отправить комментарий
Подпишитесь на каналы Комментарии к сообщению [Atom]
<< Главная страница