Название: QTreeView + QFileSystemModel: как получить filePath Отправлено: darktroll от Май 16, 2010, 16:55 Доброго времени суток, уважаемые знатоки!
У меня вопрос, который меня мучает довольно долго. Значит, есть форма, на ней расположил QTreeView и с вязал с ним QFileSystemModel. Все ок, по папкам ходить могу. У QFileSystemModel есть функция filePath, которая возвращает путь файла под индексом. Вопрос в том, как мне получить этот путь? Если можно, покажите на маленьком примере. Премного благодарен! Название: Re: QTreeView + QFileSystemModel: как получить filePath Отправлено: Авварон от Май 16, 2010, 17:54 зависит от того, какой индекс и как вы его получать собираетесь
Название: Re: QTreeView + QFileSystemModel: как получить filePath Отправлено: lit-uriy от Май 16, 2010, 19:02 примерно так:
Код Т.е. делаешь себе слот directoryChanged, с ним соединяешь сигнал от модели выделения, полученной у представления. Когда выделение в представлении меняется, то модель выделения посылает сигнал. Название: Re: QTreeView + QFileSystemModel: как получить filePath Отправлено: darktroll от Май 16, 2010, 20:29 lit-uriy, спасибо огромное! То, что нужно!
Так как я пишу на PyQt, то вот что получилось (мало ли кому пригодится): Код
Я только изучаю Python и Qt, поэтому многие очевидные вещи мне кажутся сложными. Например: 1. Зачем в сигнале два раза пишется const QModelIndex? 2. Если в слоте сделать c = self.treeview.model().filePath(a), то выдается путь текущего выделенного элемента, а если c = self.treeview.model().filePath(b), то выдается путь элемента от предыдущего нажатия. Почему? Если не займет много времени, поясните пожалуйста.... :) Название: Re: QTreeView + QFileSystemModel: как получить filePath Отправлено: ритт от Май 16, 2010, 20:43 читай документацию QAbstractItemView::currentChanged
и вообще читай документацию - она хорошая Название: Re: QTreeView + QFileSystemModel: как получить filePath Отправлено: darktroll от Май 16, 2010, 20:53 Спасибо, документация действительно хорошая, объёмная, но в ней часто сложно найти нужную инфу.
А directoryChanged не существует у QFileSystemModel. Ее предполагалось создать, что я и сделал. Пофиксил: читай документацию QAbstractItemView::currentChanged ;)и вообще читай документацию - она хорошая Всем огромное спасибо! Название: Re: QTreeView + QFileSystemModel: как получить filePath Отправлено: lit-uriy от Май 16, 2010, 21:15 >>QtCore.QObject.connect
а зачем ты так пишешь? Если ты делаешь соединение внутри класса наследника QObject, то ему доступна функция connect Название: Re: QTreeView + QFileSystemModel: как получить filePath Отправлено: lit-uriy от Май 16, 2010, 21:19 Цитировать 1. Зачем в сигнале два раза пишется const QModelIndex? в доке написано:2. Если в слоте сделать c = self.treeview.model().filePath(a), то выдается путь текущего выделенного элемента, а если c = self.treeview.model().filePath(b), то выдается путь элемента от предыдущего нажатия. Почему? Цитировать void QItemSelectionModel::currentChanged ( const QModelIndex & current, const QModelIndex & previous ) [signal] This signal is emitted whenever the current item changes. The previous model item index is replaced by the current index as the selection's current item. Название: Re: QTreeView + QFileSystemModel: как получить filePath Отправлено: darktroll от Май 16, 2010, 21:55 >>QtCore.QObject.connect а зачем ты так пишешь? Если ты делаешь соединение внутри класса наследника QObject, то ему доступна функция connect Класс наследуется от QtGui.QMainWindow. А про currentChanged уже прочел, спасибо. Название: Re: QTreeView + QFileSystemModel: как получить filePath Отправлено: lit-uriy от Май 16, 2010, 22:47 >>Класс наследуется от QtGui.QMainWindow.
дак QMainWindow потомок QObject, также как и QWidget Название: Re: QTreeView + QFileSystemModel: как получить filePath Отправлено: darktroll от Май 17, 2010, 22:55 >>Класс наследуется от QtGui.QMainWindow. дак QMainWindow потомок QObject, также как и QWidget И тем не менее выдает Python выдает ошибку "global name 'connect' is not defined". Я в ООП еще слишком слаб, поэтому может я чего намудрил. У меня вот как: Код
Сомневаюсь, что этот кусок чем-то будет полезен, но может здесь чего не так? |