Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Гурман от Мая 24, 2010, 14:38



Название: три вопроса про QTableWidget::cellChanged() и еще один
Отправлено: Гурман от Мая 24, 2010, 14:38
просто нет времени на эксперименты, кто уже делал, просьба ответьте да или нет:

1) выдается ли этот сигнал, если пользователь ушел из ячейки, не изменив ее значения? (нажал Esc)
2) выдается ли этот сигнал, если пользователь зашел в ячейку, и не изменяя значение нажал Enter?
3) выдается ли этот сигнал, если из таблицы удаляется или вставляется QTableWidgetItem?

и еще связанный вопрос про QTableQidget:

если, как во многих местах рекомендуется, перед загрузкой данных в таблицы заблокировать выдачу сигналов (чтобы cellChanged не сыпались бестолку) - не будут ли у таблицы заблокированы какие-либо полезные сигналы, используемые самим Qt, не нарушится ли работа таблицы?


Название: Re: три вопроса про QTableWidget::cellChanged() и еще один
Отправлено: bigirbis от Мая 24, 2010, 21:21
Очевидно, что данный сигнал испускается сразу после dataChanged. По сему - ответ на все 3 вопроса - "нет".
Как следствие - нет смысла блокировать данный сигнал при загрузке таблиц.
P.S. Иногда вместо экспериментов сильно помогает чтение исходников.


Название: Re: три вопроса про QTableWidget::cellChanged() и еще один
Отправлено: Гурман от Мая 25, 2010, 08:38
ну насчет "нет смысла блокировать" - это не так, сигнал выдается при любых изменениях содержимого ячейки, в том числе, при ее первоначальной программной загрузке - поэтому совет блокировать написан во многих форумах для случая, когда надо отслеживать только изменения данных пользователем, а не программные

то, что сигнал действительно выдается при выполнении setItem(), это действительно так, я проверял

отсюда можно предположить, что bigirbis сам с ячейками толком не работал...

а на три вопроса ответ действительно "нет", проверка получилась быстрее, чем разбор чужих исходников  ;)

тему можно закрыть, может результат кому-то еще пригодится, время сэкономит