Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
rcdimon |
21.11.2009, 14:02
Сообщение
#1
|
|
Студент ![]() Группа: Участник Сообщений: 69 Регистрация: 27.10.2009 Пользователь №: 1183 Спасибо сказали: 1 раз(а) Репутация: 0
|
У меня в вопроса по таблицам.
Как запретить редактирование определенного столбца? Как отслеживать операцию окончания редактирования ячейки? |
|
|
|
|
Rocky |
21.11.2009, 15:55
Сообщение
#2
|
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7
|
Как запретить редактирование определенного столбца?
Имхо только по ячейкам можно сделать. Т.е. при добавлении новой строки брать QTableWidgetItem* для нужного столбца, которуму хотим запретить редактирование и делаем например так: Как отслеживать операцию окончания редактирования ячейки?
|
|
|
|
|
igor_bogomolov |
21.11.2009, 16:04
Сообщение
#3
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29
|
1. Можно сделать через делегат
|
|
|
|
|
rcdimon |
21.11.2009, 16:11
Сообщение
#4
|
|
Студент ![]() Группа: Участник Сообщений: 69 Регистрация: 27.10.2009 Пользователь №: 1183 Спасибо сказали: 1 раз(а) Репутация: 0
|
Цитата void itemChanged ( QTableWidgetItem * item ) Действительно работает. Но с ним есть проблемка- этот сигнал посылается не только после окончания редактирования ячейки, но и после ее создания методом setItem. Надо либо как-то различать эти 2 события, либо игнорировать setItem |
|
|
|
|
igor_bogomolov |
21.11.2009, 16:18
Сообщение
#5
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29
|
Цитата(rcdimon @ 21.11.2009, 16:11) Link Но с ним есть проблемка- этот сигнал посылается не только после окончания редактирования ячейки, но и после ее создания методом setItem. Для меня это тоже является огромной проблемой. Нормального решения я так и не нашёл. Сейчас использую костыль, опять же таки из делегата. Просто отправляю свой сигнал из QItemDelegate::setModelData(...). |
|
|
|
|
rcdimon |
21.11.2009, 16:21
Сообщение
#6
|
|
Студент ![]() Группа: Участник Сообщений: 69 Регистрация: 27.10.2009 Пользователь №: 1183 Спасибо сказали: 1 раз(а) Репутация: 0
|
я просто еще не знаю что такое делегат... Но идея есть такая- отключать сигнал до наполнения таблицы ячейками и после делать connect заново )
|
|
|
|
|
Litkevich Yuriy |
21.11.2009, 16:35
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(rcdimon @ 21.11.2009, 19:11) Link Надо либо как-то различать эти 2 события, либо игнорировать setItem можно блокировать сигнал перед созданием элемента, а после создания разблокировать bool QObject::blockSignals ( bool block )
|
|
|
|
|
Rocky |
21.11.2009, 16:54
Сообщение
#8
|
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7
|
Я через флаг делал. По типу перед началом заполнения m_bFlag = false; после - true. А в самом слоте if (!m_bFlag) return;
Хотя наверное щас буду все переделывать на blockSignals )) |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 8.1.2026, 1:46 |