Russian Qt Forum

Qt => Вопросы новичков => Тема начата: qwyllum от Июнь 23, 2013, 14:46



Название: QTableWidget изменение ячейки как различить
Отправлено: qwyllum от Июнь 23, 2013, 14:46
Здравствуйте! С-но есть небольшая проблема. У меня имеются объекты на сцене и TableWidget, в котором записаны свойства выделенного объекта - координаты и имя.
Каждый раз, когда я перемещаю выделенный объект, я посылаю сигнал главному окну, чтобы в таблице изменились значения. Это работает прекрасно. Теперь мне нужно обратное - при изменении в таблице значения координаты, нужно передвинуть выделенный объект в заданную точку. И вот тут начинаются проблемы -
Слот cellChanged срабатывает каждый раз при перемещении объекта и возвращает его в ту же точку.

Пробовал вывести в отладку при перемещении значение координат выделенного объекта(1 столбец) и значение таблицы(2 столбец). Например, для координаты х:

283 283
284 283
284 284
284 284
285 284

Получается, что сперва изменяется координата объекта, но какого-то рожна в таблице остается старое значение. Поэтому координата x становится равной своему предыдущему значение, т.е. фактически не двигается

Можно ли как-то отделить изменение таблицы программно от изменения пользователем? Т.е. если пользователь нажал на ячейку и изменил, то перемещаем объект.

Заранее огромное спасибо!


Название: Re: QTableWidget изменение ячейки как различить
Отправлено: Kurles от Июнь 23, 2013, 16:16
Если я правильно понял проблему - всего то надо не дать сработать cellChanged(), т.е. перед перемещением вызвать метод QObject::blockSignals(bool block) c параметром true у того объекта, кто испускает сигнал cellChanged(), затем переместить, и снова вызвать QObject::blockSignals(bool block), но уже с параметром false.