Как вы сказали, прямо сейчас у вас есть QTableView.selectionChanged(), возвращающий выбор обратно в ваш матплот. Наиболее эффективным подходом было бы, чтобы ваш матплот излучал сигнал для его выбора с соответствующими элементами.
Табличное представление уже хранит свой выбор в QItemSelectionModel, поэтому, насколько я понимаю, было бы избыточным и ненужным хранить собственный атрибут isSelected для элементов. Ваше представление matplot должно знать элементы, которые оно использует, и должно иметь возможность уведомлять табличное представление об изменениях выбора.
Ваше представление matplot может иметь сигнал, который вы испускаете, например selectionChanged(items)
, и может по-прежнему не знать о табличном представлении.
Ваше табличное представление, поскольку оно уже знает о представлении матплота, может подключиться к своему selectionChanged(items)
матплоту и прослушивать изменения выбора. Даже если ваша таблица также испускает сигнал и ничего не знает о matplot, вы можете установить связь в любом родительском классе, который знает о них обоих.
Вот почему я думаю, что этот атрибут не нужен: единственный способ использовать этот атрибут — просмотреть всю модель, проверяя каждый элемент. Это не очень эффективно. Выбор должен происходить в ответ на испускаемый сигнал.
myMatPlotView.selectionchanged.connect(myTableView.matplotSelected)
И в вашем слоте matPlotSelected()
вы можете использовать модель выбора, чтобы установить выбор предметов:
таблица
def matPlotSelected(self, qStandardItems):
selModel = self.selectionModel()
model = self.model()
for item in qStandardItems:
idx = model.indexFromItem(item)
selModel.select(idx, selModel.Select)
Обновить
В комментариях вы предоставили фрагмент кода, который действительно помог выделить то, чего вы хотите достичь.
Ваш пример
def __init__(self):
super(myDialog, self).__init__()
self.t = QtGui.QTreeView()
self.m = QtGui.QStandardItemModel()
self.t.setModel(self.m)
layout = QtGui.QVBoxLayout()
layout.addWidget(self.t)
self.setLayout(layout)
self.l = [
['one', False], ['two', True],
['three', False], ['four', True],
['five', False]]
self.populate()
def populate(self):
self.m.clear()
root = self.m.invisibleRootItem()
for item in self.l:
e = QtGui.QStandardItem()
e.setText(item[0])
root.appendRow(e)
Если это ваша реальная ситуация, то то, что я предложил выше, подходит следующим образом:
def populate(self):
self.m.clear()
root = self.m.invisibleRootItem()
selModel = self.t.selectionModel()
for item in self.l:
e = QtGui.QStandardItem()
e.setText(item[0])
root.appendRow(e)
if item[1]:
idx = self.m.indexFromItem(e)
selModel.select(idx, selModel.Select)
person
jdi
schedule
03.05.2012