QTableWidget signal cellChanged (): различать пользовательский ввод и изменение с помощью подпрограмм - PullRequest
3 голосов
/ 12 марта 2010

Я использую PyQt, но мой вопрос общий Qt:

У меня есть QTableWidget, который устанавливается функцией updateTable. Он записывает данные из DATASET в таблицу при вызове. К сожалению, это заставляет мой QTableWidget испускать сигнал cellChanged () для каждой ячейки.

Сигнал cellChanged () подключен к функции on_tableWidget_cellChanged, которая считывает содержимое измененной ячейки и записывает его обратно в DATASET. Это необходимо, чтобы позволить пользователю изменять данные вручную.

Таким образом, каждый раз, когда таблица обновляется, ее содержимое записывается обратно в DATASET.

Есть ли способ отличить, была ли ячейка изменена пользователем или updateTable?

Я думал о временном отключении on_tableWidget_cell, измененной updateTable, но это выглядит немного грязно.

Ответы [ 3 ]

6 голосов
/ 23 марта 2010

В похожей ситуации я только что использовал

bool QObject::blockSignals ( bool block )
bool QObject::signalsBlocked () const

Блокировать сигналы перед настройкой таблицы, затем разблокировать:

myTable.blockSignals(True)
#blah-blah..
myTable.blockSignals(False)
1 голос
/ 15 марта 2010

Я бы порекомендовал изменить с QTableWidget на QTableView с соответствующей моделью. Судя по всему, у вас есть база данных или другой объект данных, в любом случае содержащий и упорядочивающий данные, так что, надеюсь, это будет довольно легко сделать. Это позволит вам различать правки (setData вызывается для вашей модели) и обновления (data вызывается для вашей модели).

1 голос
/ 12 марта 2010

Кажется, что это единственный сигнал в QTableWidget хотя бы для 4.6.Вы можете опубликовать запрос функции, но я не знаю, принят ли он, и вы могли бы ждать долго; -)

Может быть, вы могли бы попытаться написать подкласс QTableWidget и генерировать собственные сигналы, когда ячейкаизменяется внутри.

В любом случае отключение на время обновления ячейки не так уж и плохо, так как вы не можете подключиться к определенному сигналу.

...