Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » QTreeView как отобразить и управлять деревом? [RSS Feed]

#1 Март 24, 2009 11:23:09

Sergey912
От:
Зарегистрирован: 2009-01-19
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

QTreeView как отобразить и управлять деревом?

        # Дерево каталогов
tree = QtGui.QTreeView(MainFrame)

model = QtGui.QDirModel()
model.index("d:\users")
tree.setModel(model)
gridlay.addWidget(tree, 2,0,1,1)
Вот такой код, потом он просто на менеджер табл. размещения добавляется, проблема в том, что ничего в дереве не видно, судя по скорости работы он сканировать папку и не думает.
Как QTreeView “включить” чтобы просканировал папку и вывел дерево или QDirModel “включить”?

А вот если так, то явно сканирует, но не отображает:

        # Дерево каталогов
tree = QtGui.QTreeView(MainFrame)

model = QtGui.QDirModel()
tree.setModel(model)
gridlay.addWidget(tree, 2,0,1,1)
model.index("d:\users")



Отредактировано (Март 24, 2009 11:24:13)

Офлайн

#2 Март 24, 2009 17:14:50

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

QTreeView как отобразить и управлять деревом?

…PythonXY\Lib\site-packages\PyQt4\examples\itemviews\dirview.pyw



Офлайн

#3 Март 24, 2009 17:49:34

Sergey912
От:
Зарегистрирован: 2009-01-19
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

QTreeView как отобразить и управлять деревом?

А как его на форму поставить? Просто скопировал код из примера, при запуске появляется новое окно и тут же исчезает, он почему-то только в новом окне работает, а мне его нужно на форму определить…

        model = QtGui.QDirModel()
tree = QtGui.QTreeView()
tree.setModel(model)

tree.setWindowTitle(tree.tr("Dir View"))
tree.resize(640, 480)
tree.show()

treelay = QtGui.QHBoxLayout(self)
treelay.addWidget(tree)
gridlay.addLayout(treelay, 2,0,1,1)
При старте новое окно, которое тут же пропадает



Отредактировано (Март 24, 2009 17:51:21)

Офлайн

#4 Март 24, 2009 18:00:29

Sergey912
От:
Зарегистрирован: 2009-01-19
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

QTreeView как отобразить и управлять деревом?

У меня все в QMainWindow, в примере вообще ничего подобного нет



Офлайн

#5 Март 24, 2009 18:11:45

Sergey912
От:
Зарегистрирован: 2009-01-19
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

QTreeView как отобразить и управлять деревом?

Все получилось, я уже сам соображаю туго :)
model = QtGui.QDirModel(MainFrame )
tree = QtGui.QTreeView(MainFrame )



Офлайн

#6 Март 24, 2009 20:43:32

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

QTreeView как отобразить и управлять деревом?

правильно, либо парента указать, либо так:

self.model = QtGui.QDirModel()
self.tree = QtGui.QTreeView()



Офлайн

#7 Март 30, 2009 15:22:27

Sergey912
От:
Зарегистрирован: 2009-01-19
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

QTreeView как отобразить и управлять деревом?

Отложил его пока, но опять вернулся.
Какие сигналы, кроме,
* void collapsed (const QModelIndex&)
* void expanded (const QModelIndex&)

Еще можно использовать? Он вроде наследник QTreeWidget, но сигналы из последнего для QTreeView не работают, а мне нужно как минимум перехватывать, когда в дереве что-то выбрано, определять папка это или файл.



Офлайн

#8 Март 30, 2009 16:15:32

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

QTreeView как отобразить и управлять деревом?

Наоборот, это QTreeWidget наследник QTreeView. В QTreeView всё сложнее, чем в QTreeWidget, но зато гибкости больше. Глядите в http://doc.trolltech.com/4.5/qitemselectionmodel.html (view.selectionModel())- тут модель выделенных индексов и есть соответствующий сигнал. Получите индексы из неё по сигналу, по ним в QDirModel можно узнать что за элемент селектирован.



Офлайн

#9 Март 30, 2009 17:01:28

Sergey912
От:
Зарегистрирован: 2009-01-19
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

QTreeView как отобразить и управлять деревом?

>> тут модель выделенных индексов и есть соответствующий сигнал.
Не очень понял, что это за сигнал?

self.selectionModel = QtGui.QItemSelectionModel(DirModel) # DirModel и есть моя модель
self.TreeViev.setSelectionModel(self.selectionModel) # Добавил SelectionModel к моему TreeViev

А с сигналом, ничего не понимаю…



Отредактировано (Март 30, 2009 17:11:22)

Офлайн

#10 Март 30, 2009 22:30:21

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

QTreeView как отобразить и управлять деревом?

self.connect(self.selectionModel, QtCore.SIGNAL('selectionChanged(const QItemSelection &, const QItemSelection &)'), self.selection_changed)
...
def selection_changed(self, selected, deselected):
sel_indexes = selected.indexes()
if not len(sel_indexes):
return
if DirModel.isDir(sel_indexes[0]):
pass # селектирована директория
.... и так далее



Отредактировано (Март 30, 2009 22:31:25)

Офлайн

  • Начало
  • » GUI
  • » QTreeView как отобразить и управлять деревом?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version