Название: hasSelection()==true если ничего не выбрано. Как такое возможно? Отправлено: xintrea от Январь 03, 2009, 18:01 Здравствуйте!
Столкнулся с такой проблемой. Есть объект QListView recordview. Для удаления записи из этого списка у меня есть кнопка. В определенном месте программы нужно решить, блокировать ли кнопку или не блокировать. Кнопку надо блокировать, если ни одна запись не выбрана. Я пишу такой код Код: action_delete->setEnabled(false); и натыкаюсь на ситуацию, когда в списке ничего не выбрано, а кнопка активна, причем вышеуказанный кусок кода гарантированно вызывался для обновления состояния кнопки. Добавив дебаговый вывод увидел, что при hasSelection()==true количество выбранных строк может быть равно нулю (как??). Поэтому сделал совсем идиотскую вещь - расширил условие вот так Код: if(recordview->selectionModel()->hasSelection() && и все стало работать правильно. Вопрос. Как такое возможно, что при hasSelection()==true, количество выбранных строк равно нулю? Причем, на экране запись не выбрана ни синенькой засветкой, ни пунктирными линиями вокруг записи. Название: Re: hasSelection()==true если ничего не выбрано. Как такое возможно? Отправлено: developer от Январь 03, 2009, 18:15 Может быть, что selectionModel() некорректно удаляеться после выбора какого-либо елемента. То-есть я имею ввиду что когда ты только запустил прогу то recordview->selectionModel()->hasSelection() не существует и оно равно false, но если ты уже что-либо делал с recordview->selectionModel() то создаеться объект который уже не удаляеться, потому recordview->selectionModel()->hasSelection() равно true
Название: Re: hasSelection()==true если ничего не выбрано. Как такое возможно? Отправлено: Dendy от Январь 03, 2009, 18:23 А что при этом в recordview->selectionModel()->selectedIndexes()?
Название: Re: hasSelection()==true если ничего не выбрано. Как такое возможно? Отправлено: xintrea от Январь 03, 2009, 18:49 А что при этом в recordview->selectionModel()->selectedIndexes()? Тоже пусто. Цитировать hasSelection true Selected rows size 0 Selected indexes size 0 Название: Re: hasSelection()==true если ничего не выбрано. Как такое возможно? Отправлено: Dendy от Январь 03, 2009, 18:57 Сходу и не поймёшь. Чем гадать на кофейной гуще зайдите отладчиком в hasSelection() и посмотрите почему он возвращает true.
Название: Re: hasSelection()==true если ничего не выбрано. Как такое возможно? Отправлено: xintrea от Январь 03, 2009, 19:09 Ну кое-как решил проблему. Такое поведение происходит после кардинального изменения данных в QListView и вызова метода reset() для модели данных.
Пришлось после вызова reset() добавить вызова clear() и clearSelection() для selectionModel. После этого ситуация, когда hasSelection() говорит что что-то выбрано, а на деле ничего не выбрано, теперь не возникает. Название: Re: hasSelection()==true если ничего не выбрано. Как такое возможно? Отправлено: Dendy от Январь 03, 2009, 19:11 Я бы порекомендовал вернуть код в изначальный вид и понять в чём проблема. Если это баг в Qt - заслать репорт.
Название: Re: hasSelection()==true если ничего не выбрано. Как такое возможно? Отправлено: xintrea от Январь 03, 2009, 19:49 Я бы порекомендовал вернуть код в изначальный вид и понять в чём проблема. Если это баг в Qt - заслать репорт. Проблема в том, что если выставить засветку на какую-либо запись в QListView, а потом кардинально поменять данные в модели данных (ну, то есть QListView начинает показывать абсолютно другой список записей), сопроводить эту смену вызовом слота reset(), то selectionModel не сбрасывается. И видимо продолжает хранить указатель на выделенную строку, хотя той строки уже нет (она заменена на другую). Незнаю, баг это или фича, но с англицким у меня eng->rus еще кое как, а вот rus->eng уже никак. Так что тролли остаются без моего багрепорта. |