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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: проблема с выделением элемента QListView  (Прочитано 11527 раз)
registrationfedser87
Гость
« : Сентябрь 01, 2008, 14:06 »

есть QTreeView и QLineEdit. Они связаны с помощью QDataWidgetMapper(в QTreeView отображается список записей модели,а в QLineEdit сответственно выбранный элемент QTreeView). Проблема в том что у меня не подсвечивается нужный элемент когда я нажимаю <Enter> после завершения редактирования значения в QLineEdit (я поставил обработчик в QLineEdit на нажатие <Enter>, хотя фокус устанавливается на нужном элементе). Если не нажимать <Enter> то элемент выделяется как надо. Вот код выделения элемента(тут происходит выделение последнего элемента):
Код:
listView->selectionModel()->setCurrentIndex(model->index(model->rowCount()-1, 1), QItemSelectionModel::ClearAndSelect);
Записан
EhTemka
Гость
« Ответ #1 : Сентябрь 02, 2008, 13:19 »

Сто-то не совсем понятно в чем проблема Улыбающийся, но попробуй так

Код:
listView->selectionModel()->select(model->index(model->rowCount()-1, 1), QItemSelectionModel::ClearAndSelect);
Записан
registrationfedser87
Гость
« Ответ #2 : Сентябрь 03, 2008, 06:22 »

проблема в том что не подсвечивается элемент в QTreeView после того как я нажму <Enter> в связанном с QTreeView QLineEdit (предложенный способ не помог)
« Последнее редактирование: Сентябрь 03, 2008, 06:25 от registrationfedser87 » Записан
EhTemka
Гость
« Ответ #3 : Сентябрь 03, 2008, 17:56 »

Я так понимаю, что тебе надо после редактирования элемента выделить(перейти на) следующий(другой) элемент, правильно?

Цитировать
я поставил обработчик в QLineEdit на нажатие <Enter>

Я так понимаю это слот связанный с сигналом returnPressed () ?
Покажи код этого обработчика полностью.
Записан
registrationfedser87
Гость
« Ответ #4 : Сентябрь 04, 2008, 06:28 »

да,стоит слот  на сигнал returnPressed(). вот код обработчика:
Код:
void lineEdit_returnPressed()
{
      QModelIndex mIndex= listView->currentIndex();
      lineEdit->clearFocus();   
      listView->selectionModel()->select(mIndex, QItemSelectionModel::ClearAndSelect);
}
флаги QItemSelectionModel::*** пробовал все. Сейчас выделение элемента происходит,но он так сказать перестаёт быть связанным с LineEdit(пока заново вручную мышкой не выделишь). Мне нужно чтобы выделился не следующий элемент,а текущий. У моей модели я поставил model->setEditStrategy ( QSqlTableModel::OnFieldChange). Если поставить QSqlTableModel::OnManualSubmit то всё работает как надо,но как сами понимаете придётся вручную подтверждать изменение результата,что меня не устраивает. Политика QSqlTableModel::OnRowChange тоже мне не подходит.
« Последнее редактирование: Сентябрь 04, 2008, 06:32 от registrationfedser87 » Записан
crossly
Гость
« Ответ #5 : Сентябрь 04, 2008, 09:00 »

void QAbstractItemView::setCurrentIndex ( const QModelIndex & index )   [slot]
Записан
registrationfedser87
Гость
« Ответ #6 : Сентябрь 04, 2008, 09:12 »

Так я  тоже делал-в этом случае вообще даже строчку не выделяет.
Записан
EhTemka
Гость
« Ответ #7 : Сентябрь 04, 2008, 10:00 »

Попробуй так
Код:
QModelIndex mIndex= listView->currentIndex();
      lineEdit->clearFocus();   
      listView->selectionModel()->select(mIndex, QItemSelectionModel::ClearAndSelect);
      dataWidgetMapper->setCurrentModelIndex(mIndex);
Если конечно у тебя там есть доступ к твоему мепперу. Только все равно не понятно. Если ты редактируешь каккой то элемент, то он же уже должен быть выбранным?
Записан
registrationfedser87
Гость
« Ответ #8 : Сентябрь 04, 2008, 10:35 »

Так я тоже уже пробывал-при таком подходе выделение исчезает. ДА-элемент уже выбран,я его редактирую. Нужно чтобы когда я закончу редактирование и нажму <Enter> выделенным остался только что редактируемый элемент(чтобы пользователь не "терялся" и не искал "а какой элемент он сейчас редактировал"). Просто видимо из-за того что политику модели я установил в QSqlTableModel::OnFieldChange (чтобы сразу изменения занеслись в бд) происходит сбрасывание выделенного элемента. Что странно- тот код выделения элемента что я приводил раньше работает при добавлении(я сделал чтобы выделялась только что добавленная новая запись)
Записан
EhTemka
Гость
« Ответ #9 : Сентябрь 04, 2008, 11:54 »


...
-по переднему колесу пинал?
-пинал
-а капотом хлопал?
-хлопал
-всё равно не заводится?
-не заводится
-ну тогда я незнаю... Улыбающийся



Записан
registrationfedser87
Гость
« Ответ #10 : Сентябрь 04, 2008, 12:09 »

 Смеющийся Хоть проблема  и не решена,но всё равно спасибо всем кто не остался равнодушным и не прошёл мимо
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #11 : Сентябрь 07, 2008, 21:47 »

Так я тоже уже пробывал-при таком подходе выделение исчезает. ДА-элемент уже выбран,я его редактирую. Нужно чтобы когда я закончу редактирование и нажму <Enter> выделенным остался только что редактируемый элемент(чтобы пользователь не "терялся" и не искал "а какой элемент он сейчас редактировал"). Просто видимо из-за того что политику модели я установил в QSqlTableModel::OnFieldChange (чтобы сразу изменения занеслись в бд) происходит сбрасывание выделенного элемента. Что странно- тот код выделения элемента что я приводил раньше работает при добавлении(я сделал чтобы выделялась только что добавленная новая запись)

Какая-то мистика. Количество строк в QListView при редактировании текущей выделеной строки не меняется. Если запоминать QModelIndex текущей выделеной строки, и после редактирования выставлять выделение на этот QModelIndex, то выделение должно выставиться именно на данную строку.

В крайнем случае, можно даже запоминать вместо QModelIndex номер строки и потом выставлять выделение на строку с этим номером.

Может быть автор топика имеет в виду, что выделение устанавливется правильно, но в поле QLineEdit исчезает текущая, только что отредактированная строка?
Записан

Собираю информацию по крупицам
http://webhamster.ru
registrationfedser87
Гость
« Ответ #12 : Сентябрь 08, 2008, 06:02 »

нет,текущая строка остаётся в QLineEdit, но QLineEdit так сказать становится не связан с моделью (пока заново не выделишь элемент вручную мышкой), т.е. если я что то меняю в QLineEdit то эти изменения никак не заносятся в модель.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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