У меня есть QTableView, заполненный данными, поступающими из QSqlTableModel. Каждая строка QTableView представляет собой «статью», исходящую с веб-сайта. Статьи могут быть прочитаны или непрочитаны, точно так же, как электронная почта. Состояние чтения/непрочтения сохраняется в базе данных под полем «новый».QTableView: обновить модель «на лету» и выбрать правильную строку
Если изделие непрочитано, оно отображается определенным образом в представлении. Если он читается, он отображается по-другому, например, по электронной почте в любом почтовом менеджере.
Когда пользователь щелкает по статье непрочитанные, статья помечена чтения, что означает, что модель хранения данных обновляется:
def markOneRead(self, element):
"""Slot to mark an article read"""
table = self.liste_tables_in_tabs[self.onglets.currentIndex()]
model = self.liste_models_in_tabs[self.onglets.currentIndex()]
proxy = self.liste_proxies_in_tabs[self.onglets.currentIndex()]
new = table.model().index(element.row(), 12).data()
if new == 0:
return
else:
# Save the current line
line = table.selectionModel().currentIndex().row()
# Update the model
table.model().setData(table.model().index(line, 12), 0)
try:
# Try to update the model
model.setQuery(self.query)
proxy.setSourceModel(model)
table.setModel(proxy)
except AttributeError:
pass
# Once the model is updated, reselect the line saved
table.selectRow(line)
Хотя этот метод в большинстве случаев работает, я только сохранить тока номер строки в переменной «строка». Поэтому, если модель изменилась (из любого другого процесса программы), когда я делаю table.selectRow (строка), я выбираю ту же строку да, но это может быть совершенно другой элемент.
Так что мне нужно более точное средство для хранения щелкнутого элемента, прежде чем обновлять модель.
У вас есть идея?
Я не очень понимаю ваш вопрос. Зачем выбирать строку программно? Если пользователь щелкнет в таблице, он выберет этот элемент/строку. Если вас беспокоит изменение выбора, если новые данные добавляются в верхней части таблицы, вы, вероятно, захотите обновить свою модель выбора при добавлении данных. – HashSplat
Я предполагаю, что вы беспокоитесь о добавлении новых данных в верхнюю часть всех изменений, но выбор остается на месте. Вы можете попытаться добавить данные внизу и изменить направление макета QTableView на BottomToTop. Я не знаю, сработает ли это. Другой вариант - сохранить rowCount, а также переменную строки и проверить для другого rowCount, прежде чем table.selectRow (строка) – HashSplat
Да, вы получили его во втором комментарии, который я думаю. За исключением того, что QTableView сортируется по дате, а элементы, добавленные другим процессом, необязательно добавляются сверху или снизу, поэтому мне нужно точно выбрать выбранный элемент. – Rififi