Russian Qt Forum
Ноябрь 26, 2024, 10:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget изменение ячейки как различить  (Прочитано 2458 раз)
qwyllum
Гость
« : Июнь 23, 2013, 14:46 »

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

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

283 283
284 283
284 284
284 284
285 284

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

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

Заранее огромное спасибо!
« Последнее редактирование: Июнь 23, 2013, 14:54 от qwyllum » Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Июнь 23, 2013, 16:16 »

Если я правильно понял проблему - всего то надо не дать сработать cellChanged(), т.е. перед перемещением вызвать метод QObject::blockSignals(bool block) c параметром true у того объекта, кто испускает сигнал cellChanged(), затем переместить, и снова вызвать QObject::blockSignals(bool block), но уже с параметром false.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.139 секунд. Запросов: 22.