Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: registrationfedser87 от Сентябрь 01, 2008, 14:06



Название: проблема с выделением элемента QListView
Отправлено: 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);


Название: Re: проблема с выделением элемента QListView
Отправлено: EhTemka от Сентябрь 02, 2008, 13:19
Сто-то не совсем понятно в чем проблема :), но попробуй так

Код:
listView->selectionModel()->select(model->index(model->rowCount()-1, 1), QItemSelectionModel::ClearAndSelect);


Название: Re: проблема с выделением элемента QListView
Отправлено: registrationfedser87 от Сентябрь 03, 2008, 06:22
проблема в том что не подсвечивается элемент в QTreeView после того как я нажму <Enter> в связанном с QTreeView QLineEdit (предложенный способ не помог)


Название: Re: проблема с выделением элемента QListView
Отправлено: EhTemka от Сентябрь 03, 2008, 17:56
Я так понимаю, что тебе надо после редактирования элемента выделить(перейти на) следующий(другой) элемент, правильно?

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

Я так понимаю это слот связанный с сигналом returnPressed () ?
Покажи код этого обработчика полностью.


Название: Re: проблема с выделением элемента QListView
Отправлено: registrationfedser87 от Сентябрь 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 тоже мне не подходит.


Название: Re: проблема с выделением элемента QListView
Отправлено: crossly от Сентябрь 04, 2008, 09:00
void QAbstractItemView::setCurrentIndex ( const QModelIndex & index )   [slot]


Название: Re: проблема с выделением элемента QListView
Отправлено: registrationfedser87 от Сентябрь 04, 2008, 09:12
Так я  тоже делал-в этом случае вообще даже строчку не выделяет.


Название: Re: проблема с выделением элемента QListView
Отправлено: EhTemka от Сентябрь 04, 2008, 10:00
Попробуй так
Код:
QModelIndex mIndex= listView->currentIndex();
      lineEdit->clearFocus();   
      listView->selectionModel()->select(mIndex, QItemSelectionModel::ClearAndSelect);
      dataWidgetMapper->setCurrentModelIndex(mIndex);
Если конечно у тебя там есть доступ к твоему мепперу. Только все равно не понятно. Если ты редактируешь каккой то элемент, то он же уже должен быть выбранным?


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


Название: Re: проблема с выделением элемента QListView
Отправлено: EhTemka от Сентябрь 04, 2008, 11:54

...
-по переднему колесу пинал?
-пинал
-а капотом хлопал?
-хлопал
-всё равно не заводится?
-не заводится
-ну тогда я незнаю... :)





Название: Re: проблема с выделением элемента QListView
Отправлено: registrationfedser87 от Сентябрь 04, 2008, 12:09
 ;D Хоть проблема  и не решена,но всё равно спасибо всем кто не остался равнодушным и не прошёл мимо


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

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

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

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


Название: Re: проблема с выделением элемента QListView
Отправлено: registrationfedser87 от Сентябрь 08, 2008, 06:02
нет,текущая строка остаётся в QLineEdit, но QLineEdit так сказать становится не связан с моделью (пока заново не выделишь элемент вручную мышкой), т.е. если я что то меняю в QLineEdit то эти изменения никак не заносятся в модель.