Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Evgeniya от Февраля 12, 2010, 14:14



Название: Как выйти из режима редактирования ячейки
Отправлено: Evgeniya от Февраля 12, 2010, 14:14
Доброго всем времени суток...
Есть таблица в которой на некоторые столбцы установлен делегат...
И вот с помощью слота
void   edit ( const QModelIndex & index ) я могу войти прогрммно в режим редактирования ячейки... А с есть такой слот,чтобы я смогла выйти из режима редактирования ячейки.. Ведь по умолчания выйти из режима редактирования я могу только при выделении следующей ячейке именно мышкой..
Я например,хочу сделать так...как обычно при нажатии на клавиатуре стрелочки вниз выделяются следующие за текущей строчки, а мне надо чтобы при нажатии стрелочки вниз выходил из режима редактирования предыдущий элемент и заходил следующий


Название: Re: Как выйти из режима редактирования ячейки
Отправлено: lit-uriy от Февраля 12, 2010, 14:20
closePersistentEditor
Подойдёт?


Название: Re: Как выйти из режима редактирования ячейки
Отправлено: Evgeniya от Февраля 12, 2010, 14:42
Он выходит из режима редактирования,только данные не сохранят  >:(


Название: Re: Как выйти из режима редактирования ячейки
Отправлено: Evgeniya от Февраля 12, 2010, 15:07
Делаю update(const QModelIndex & index ), а потом closePersistentEditor все-равно не помогает...он выходит из режима редактирования, а данные не сохраняет


Название: Re: Как выйти из режима редактирования ячейки
Отправлено: lit-uriy от Февраля 12, 2010, 15:14
попробуй тогда просто менять текущий индекс, setCurrentIndex
можно например так:
selectionModel()->setCurrentIndex(index, QItemSelectionModel::NoUpdate);


Название: Re: Как выйти из режима редактирования ячейки
Отправлено: SABROG от Февраля 12, 2010, 21:56
Нужно переопределить pressKeyEvent у виджета который выступает в роли editor'а итема, при нажатии на стрелочки клавиатуры слать какой-нибудь сигнал. Сигнал подвязываешь к делегату, а там уже выполняешь эти методы:

Код
C++ (Qt)
   emit commitData(editor);
   emit closeEditor(editor, QAbstractItemDelegate::EditNextItem);
 

Затем наследуешься от вьюхи и переопределяешь слот:

void QAbstractItemView::closeEditor ( QWidget * editor, QAbstractItemDelegate::EndEditHint hint )   [virtual protected slot]

Тут уже перемещаешь редактирование в нужное место. Единственное надо добавить в namespace EndEditHint 4 своих значения, чтобы перемещаться на любую сторону света.


Название: Re: Как выйти из режима редактирования ячейки
Отправлено: Evgeniya от Февраля 16, 2010, 15:58
SABROG,спасибо за ответ!!!Очень полезный...правда я теперь по другому хочу сделать..я хочу чтобы при нажатии Tab у меня редактор скакал по порядку по всему столбцу таблицы и вызывался бы редактор.. Но когда заканчивается редактирование предыдущего элемента,я обновляю данные модели методом setQuery(),то текущие индексы модели обнуляются и всегда начинается с редактирования нулевого элемента... Если я не обновляю данные модели,то все нормально происходит ... при нажатии на Tab все редактируется,только данные не обновляются. Как же можно решить данную ситуацию?