Название: [Решено] QTableView выделить ячейку после редактирования Отправлено: arial от Сентябрь 29, 2009, 09:43 После редактирования ячейки в QTableView пропадает фокус с этой ячейки. Как сделать так, чтобы фокус оставался на отредактированной ячейке?
Название: Re: QTableView выделить ячейку после редактирования Отправлено: CroCIV от Сентябрь 30, 2009, 07:30 переопределение virtual void focusOutEvent ( QFocusEvent * event ) у этого таблвью не помогает?
Название: Re: QTableView выделить ячейку после редактирования Отправлено: arial от Октябрь 02, 2009, 08:00 focusOutEvent возникает, когда заходишь в редактируемую ячейку, а мне нужно установить выделение на ячейку сразу после выхода из неё.
Неужели с этим в QTableView такая проблема? Двигаешься курсорными клвишами по ячейкам, если нужно редактируешь активную ячейку, после окончания редактирования продолжаешь с этой ячейки двигаться к следующим. А тут вообще активная ячейка теряется и двигаться начинаешь с начала таблицы. Название: Re: QTableView выделить ячейку после редактирования Отправлено: ranet от Октябрь 02, 2009, 09:35 focusOutEvent возникает, когда заходишь в редактируемую ячейку, а мне нужно установить выделение на ячейку сразу после выхода из неё. С похожей трудностью сталкивался.. У тебя же QTableView наверное к таблице БД какой-нибудь привинчен?Неужели с этим в QTableView такая проблема? Двигаешься курсорными клвишами по ячейкам, если нужно редактируешь активную ячейку, после окончания редактирования продолжаешь с этой ячейки двигаться к следующим. А тут вообще активная ячейка теряется и двигаться начинаешь с начала таблицы. Название: Re: QTableView выделить ячейку после редактирования Отправлено: arial от Октябрь 02, 2009, 12:14 С похожей трудностью сталкивался.. У тебя же QTableView наверное к таблице БД какой-нибудь привинчен? Совершенно верно, работаю с таблицей из базы данных через QSqlRelationalTableModel.Название: Re: QTableView выделить ячейку после редактирования Отправлено: Danila_Bagrofff от Октябрь 02, 2009, 13:04 А принудительно установить фокус по окончании редактирования? Это же тоже событие - окончание редактирования.
Название: Re: QTableView выделить ячейку после редактирования Отправлено: arial от Октябрь 02, 2009, 13:56 А принудительно установить фокус по окончании редактирования? Это же тоже событие - окончание редактирования. Пробовал переопределить keyPressEvent у моей QTableView: Код Но этот способ не работает. Видимо я что-то не так делаю. Название: Re: QTableView выделить ячейку после редактирования Отправлено: ranet от Октябрь 02, 2009, 14:43 С похожей трудностью сталкивался.. У тебя же QTableView наверное к таблице БД какой-нибудь привинчен? Совершенно верно, работаю с таблицей из базы данных через QSqlRelationalTableModel.Название: Re: QTableView выделить ячейку после редактирования Отправлено: Danila_Bagrofff от Октябрь 02, 2009, 15:13 Ранет
Строка не изменит положение в таблице, если отключишь сортировку. Даже если изменится, то все равно можно узнать текущий номер строки/столбца. Щас покопаюсь... Название: Re: QTableView выделить ячейку после редактирования Отправлено: ranet от Октябрь 02, 2009, 16:00 Ранет Хочется не отключать.. код, который у меня по ссылке выше приведен, вполне нормально работает даже и в этом случае.. но хочется как-то более толково его использовать (то есть засунуть куда-нибудь в производный от TableModel класс , и забыть, и чтобы работал:))Строка не изменит положение в таблице, если отключишь сортировку. Даже если изменится, то все равно можно узнать текущий номер строки/столбца. Щас покопаюсь... Название: Re: QTableView выделить ячейку после редактирования Отправлено: arial от Октябрь 03, 2009, 22:55 Ответ (http://www.forum.crossplatform.ru/index.php?showtopic=3453&view=findpost&p=24317) найден на соседнем форуме (http://www.forum.crossplatform.ru/index.php):
После того, как модель была отредактирована посылается сигнал QAbstractItemModel::dataChanged (http://doc.crossplatform.ru/qt/4.5.0/qabstractitemmodel.html#dataChanged), сделай для его обработки слот, в котором в свою очередь делай переход на нужную ячейку. Название: Re: QTableView выделить ячейку после редактирования Отправлено: ranet от Октябрь 05, 2009, 14:09 Ответ (http://www.forum.crossplatform.ru/index.php?showtopic=3453&view=findpost&p=24317) найден на соседнем форуме (http://www.forum.crossplatform.ru/index.php): Спасибо, тоже использую где-нибудь:) Но пока сделал немножко иначе. Создал свой класс на основе QSqlTableModel, и в нем добавил просто функцию, void my_submit(QDataWidgetMapper * en_mapper, QTableView * en_tableView) В неё "спрятал" свой упорядочивающий код. И вместо штатного submitall() вызываю её :) - нормально работает. Не слишком нравится, что ей приходится указатели передавать на маппер и на вьюху, но это вобщем фигня - главное теперь все работает. И главное - для любой таблицы, какая есть!После того, как модель была отредактирована посылается сигнал QAbstractItemModel::dataChanged (http://doc.crossplatform.ru/qt/4.5.0/qabstractitemmodel.html#dataChanged), сделай для его обработки слот, в котором в свою очередь делай переход на нужную ячейку. Название: Re: [Решено] QTableView выделить ячейку после редактирования Отправлено: arial от Октябрь 08, 2009, 10:45 Ещё один удачный вариант (http://www.forum.crossplatform.ru/index.php?showtopic=2941&pid=21236&mode=threaded&start=0#entry21236) с того же форума (http://www.forum.crossplatform.ru/):
Цитировать Решил я эту задачку... Пришлось изучать исходный код в части работы с базами данных. Как оказалось в этом плане Qt работает довольно примитивно. При использовании политики OnFieldChange результат изменений ячейки данных в Grid сначала отправляется на сервер, а затем для того, чтобы отобразить эти изменения, посылается запрос на загрузку всех данных... Это очень неэффективно... При использовании других политик происходит примерно то же самое, только с задержкой по времени. Для OnManualSubmit - изменения загружаются после команды submilAll. Но в этом случае изменения сохраняются в буфере и отображаются в виджете Grid. Этот момент я и использовал. После множества экспериментов все свелось к простому дочернему классу: Код
Название: Re: [Решено] QTableView выделить ячейку после редактирования Отправлено: ranet от Октябрь 08, 2009, 16:23 То есть теперь он будет обновлять в модели из таблицы только ту строку, которая редактировалась.. Я себе скопировал ;) Спасибо!!!
Название: Re: [Решено] QTableView выделить ячейку после редактирования Отправлено: break от Октябрь 17, 2009, 01:08 Использую БД Firebird + QSqlRelationTableModel + TableView - при установки политики onManualSubmit - фокус с ячейки никуда не пропадает. Кроме того у меня даже после переоткрытия таблицы - например после подтверждения пользователем изменений - восстанавливается активная ячейка через view()->setCurrentIndex();
|