QTableView::edit( const QModelIndex index ) не работает |
Здравствуйте, гость ( Вход | Регистрация )
QTableView::edit( const QModelIndex index ) не работает |
pau |
28.11.2013, 18:00
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 28.11.2013 Пользователь №: 3989 Спасибо сказали: 5 раз(а) Репутация: 0 |
Добрый день.
Хочу запретить добавлять одинаковые данные в таблицу. Делаю следующим образом (class MyModel : public QAbstractTableModel):
Теперь надо отловить этот сигнал и вернуть ячейку таблицы (QTableView *myTableView) обратно в режим редактирования:
Но во время выполнения таблица обратно в режим редактирования не переходит а в консоли я получаю сообщение:
Что я делаю неправильно? Может быть есть какой-нибудь другой способ запретить добавлять одинаковые данные в таблицу? Заранее большое спасибо за ответы. |
|
|
Анна |
29.11.2013, 9:52
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: 4 |
1. А тебя не смущает то, что result становится равен true, когда найдётся элемент, содержащий value? Я так понимаю, что findItem() возвращает -1, когда ни у одного элемента не найдётся value - случай, когда надо разрешить установку нового значения, то есть:
result = findItem( value.toString() ) == -1; 2. На всякий случай проверяй валидность индекса if(index.isValue()), а то налетишь на кучу неприятностей. 3. emit( dataChanged( index, index ); ... emit ( dataInvalid( index ) ); Для emit не нужно скобок . А без этого сигнала редактирование прекращается? Возможно, делегат, отвечающий за редактирование элемента, ещё не отработал до конца, а ты его снова пинаешь. Сообщение отредактировал Анна - 29.11.2013, 9:52 |
|
|
pau |
29.11.2013, 12:20
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 28.11.2013 Пользователь №: 3989 Спасибо сказали: 5 раз(а) Репутация: 0 |
1. А тебя не смущает то, что result становится равен true, когда найдётся элемент, содержащий value? Я так понимаю, что findItem() возвращает -1, когда ни у одного элемента не найдётся value - случай, когда надо разрешить установку нового значения, то есть:
согласен. у меня просто немного сложнее сделано, когда переносил забыл поправить :) 2. На всякий случай проверяй валидность индекса if(index.isValue()), а то налетишь на кучу неприятностей. естессно - там где точечки стоят, там и проверяю :) 3.
Для emit не нужно скобок . вроде бы можно и так - мне лично так как-то приятнее А без этого сигнала редактирование прекращается? Возможно, делегат, отвечающий за редактирование элемента, ещё не отработал до конца, а ты его снова пинаешь. действительно - дело в том, что на момент вызова QTableView находится еще в режиме редактирования. Так что надо просто добавить Qt::QueuedConnection при соединении с соответствующим сигналом:
Все работает! Большое спасибо! |
|
|
Алексей1153 |
29.11.2013, 13:35
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
Текстовая версия | Сейчас: 22.11.2024, 16:40 |