2014-09-14 3 views
1

Я пытаюсь реализовать структуру учетной записи (с субсчетами) в PyQt4, используя QTreeView и QStandardItemModel. После большого количества проб и ошибок я, наконец, готов к просмотру дерева. Теперь я хочу, чтобы что-то произошло, когда я нажимаю на определенную строку в древовидном представлении. Мой опыт из инструментария GTK предполагает, что я бы прослушал какой-то сигнал, издаваемый при щелчке строки, а затем записывал обработчик сигнала, чтобы узнать, какая строка была нажата. Я не могу понять, как это сделать в PyQt. Какие-либо предложения?Выбранная строка в QTreeView/QStandardItemModel

+0

Покажите нам, какой код у вас есть, пожалуйста. – W1ll1amvl

ответ

2

В классе QtGui.QTreeView есть сигнал void clicked (const QModelIndex&) & void pressed (const QModelIndex&) доступен для использования. Эта сигнальная функция находится в QtGui.QAbstractItemView Унаследовано QtGui.QTreeView.

Данные этого сигнала относятся к классу QtCore.QModelIndex, поэтому этот класс имеет QAbstractItemModel QModelIndex.model (self) может получить ваши данные модели QtGui.QStandardItemModel.

Пример;

import sys 
from PyQt4 import QtGui 

class QCustomTreeView (QtGui.QTreeView): 
    def __init__ (self, parentQWidget = None): 
     super(QCustomTreeView, self).__init__(parentQWidget) 
     self.pressed.connect(self.myPressedEvent) 

    def myPressedEvent (self, currentQModelIndex): 
     # Use QModelIndex to show current data pressed 
     print currentQModelIndex.column(), currentQModelIndex.row() 
     print currentQModelIndex.data().toString() 
     # Also can implement your QStandardItemModel here 
     currentQStandardItemModel = currentQModelIndex.model() 

myQApplication = QtGui.QApplication([]) 
myQTreeView = QCustomTreeView() 
headerQStandardItemModel = QtGui.QStandardItemModel() 
headerQStandardItemModel.setHorizontalHeaderLabels([''] * 4) 
myQTreeView.setModel(headerQStandardItemModel) 
# Append data row 1 
row1QStandardItem = QtGui.QStandardItem('ROW 1') 
row1QStandardItem.appendRow([QtGui.QStandardItem(''), QtGui.QStandardItem('1'), QtGui.QStandardItem('3'), QtGui.QStandardItem('5')]) 
headerQStandardItemModel.appendRow(row1QStandardItem) 
# Append data row 2 
row2QStandardItem = QtGui.QStandardItem('ROW 2') 
row2QStandardItem.appendRow([QtGui.QStandardItem(''), QtGui.QStandardItem('2'), QtGui.QStandardItem('4'), QtGui.QStandardItem('6')]) 
headerQStandardItemModel.appendRow(row2QStandardItem) 
myQTreeView.show() 
sys.exit(myQApplication.exec_()) 
Смежные вопросы