Уведомления

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

#1 Апрель 8, 2009 15:17:15

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

как правильно связать данные с узлом QTreeWidgetItem?

Есть дерево QTreeWidget. Есть обработчики событий itemClicked и itemExpanded. Как правильно связать узел QTreeWidgetItem с набором данных, чтобы обработчик событий получил эти данные, по ним определил какой узел развернули/кликнули и что делать дальше?

Например, в C# для этой цели - каждый узел имеет свойство Tag.

В питоне можно так:

node = QtGui.QTreeWidgetItem(parent)
node.setText(column, 'my node')
# вот так?
node.my_property = my_data
Правильно ли так делать или нужно смотреть в сторону node.setData()?



Отредактировано (Апрель 8, 2009 17:11:53)

Офлайн

#2 Апрель 10, 2009 02:32:29

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

как правильно связать данные с узлом QTreeWidgetItem?

Я бы рекомендовал забить на QTreeWidget и воспользоваться всей мощью QAbstractModel и QTreeView. Даже больше скажу – очень рекомендую.



Офлайн

#3 Апрель 13, 2009 20:01:56

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

как правильно связать данные с узлом QTreeWidgetItem?

Я делаю следующим образом:
1) Переопределяю mousePressEvent(): в ней распознаю по координатам нажатия мыши на каком элементе щелкнули. Зная элемент, можно писать функции-обработчики.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class MyClass(QTreeWidget):

def __init__(self):
QTreeWidget.__init__(self)
self.setColumnCount(1)

item1=QTreeWidgetItem(self)
item1.setText(0,u'элемент1')
item1.setExpanded(True)

item2=QTreeWidgetItem(item1)
item2.setText(0,u'элемент2')

def mousePressEvent(self, event):
# определяем позицию нажатия мыши
x= event.pos().x(); y= event.pos().y()
# печатаем элемент, который щелкнули, здесь можно вызывать ф-ии обработчики
print unicode(self.itemAt(x,y).text(0))
# восстанавливаем поведение mousePressEvent()
QTreeWidget.mousePressEvent(self,event)

app = QApplication(sys.argv)
w = MyClass()
w.show()
app.exec_()



Офлайн

#4 Апрель 14, 2009 01:01:11

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

как правильно связать данные с узлом QTreeWidgetItem?

gmorgunov Глянь лучше на этот сигнал: QTreeWidget::itemClicked ( QTreeWidgetItem * item, int column ), dimabest его правильно использует.

dimabest В правильном направлении мыслишь, думаю лучше воспользоваться setData() в роли QtCore.Qt.UserRole. Похожий вопрос тут уже обсуждался (про drag&drop и mimeData), правда мнения тогда разошлись - решили делать по-питонски, хакать… я бы так не делал.

P.S. Мощь QAbstractItemModel не всегда нужна, с ней не легко разобраться и въехать, этому ещё и препятствует отсутствие нужных эксепшенов, которые указывали бы на ошибки в реализации модели. Сейчас же все эксепшены доносятся в едином облике прямо из недр С++ без указания места ошибки в питоновском коде. Или же приложение тупо падает. Может это уже и поправили, но такое было, приходилось изображать из себя дебаггер:( В общем если задача простая и данных относительно мало - лучше воспользоваться QTreeWidget, имхо. В других случаях MVC конечно же рулит и стоит напрячься для этого.



Отредактировано (Апрель 14, 2009 01:02:32)

Офлайн

#5 Апрель 14, 2009 02:45:21

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

как правильно связать данные с узлом QTreeWidgetItem?

poltergeist
Сейчас же все эксепшены доносятся в едином облике прямо из недр С++ без указания места ошибки в питоновском коде. Или же приложение тупо падает.
О да… Сегфолты меня по-началу добивали… Но сейчас мне проще смастерить модель чем разбираться с поддержанием ТриИтемов в актуальном состоянии… Просто когда понимаешь как оно работает, проблемы отступают, а остаётся лишь удобство.

P.S. gmorgunov, это только в Фури-Кури гитара, это ударный инструмент, а в реальной жизни так делать не стоит…



Офлайн

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

Board footer

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

Powered by DjangoBB

Lo-Fi Version