Russian Qt Forum

Qt => Model-View (MV) => Тема начата: NortT от Май 10, 2011, 15:17



Название: Падает приложение при clearSelection();
Отправлено: NortT от Май 10, 2011, 15:17
Собственно сабж. Падает с ошибкой ASSERT failure in QList<T>::operator[]: "index out of range", file /usr/include/qt4/QtCore/qlist.h, line 463
Код - всего одна строчка:
Код
C++ (Qt)
void MainWindow::addQuestion()
{
   selectionModel->clearSelection();
}
Создается selectionModel так:
Код
C++ (Qt)
   QItemSelectionModel *selectionModel;
   CTestModel *testModel;
   testModel = new CTestModel(fileName);
   ui->questListView->setModel(testModel);
   selectionModel = ui->questListView->selectionModel();
В какую сторону копать?


Название: Re: Падает приложение при clearSelection();
Отправлено: alexman от Май 10, 2011, 15:38
QItemSelectionModel *selectionModel; - это поле класса, или в конструкторе объявлено, или там и там...?


Название: Re: Падает приложение при clearSelection();
Отправлено: NortT от Май 10, 2011, 15:48
Вот это все
Код:
    QItemSelectionModel *selectionModel;
    CTestModel *testModel;
поля класса MainWindow. А это
Код:
    testModel = new CTestModel(fileName);
    ui->questListView->setModel(testModel);
    selectionModel = ui->questListView->selectionModel();
в слоте, обрабатывающим нажатие кнопки.


Название: Re: Падает приложение при clearSelection();
Отправлено: Kolobok от Май 10, 2011, 16:28
убери из конструктора
Код:
QItemSelectionModel *selectionModel;
CTestModel *testModel;


Название: Re: Падает приложение при clearSelection();
Отправлено: NortT от Май 10, 2011, 16:33
Так ведь это не в конструкторе, это атрибуты класса.


Название: Re: Падает приложение при clearSelection();
Отправлено: Mikhail от Май 10, 2011, 16:43
Выложи объявление и реализацию класса MainWindow


Название: Re: Падает приложение при clearSelection();
Отправлено: NortT от Май 10, 2011, 16:57
http://pastebin.ca/2056246 - mainwindow.cpp
http://pastebin.ca/2056248 - mainwindow.h
С model/view я первый раз сталкиваюсь, возможно я эту идею вообще не так понял и тут вообще все не правильно


Название: Re: Падает приложение при clearSelection();
Отправлено: shirushizo от Май 10, 2011, 21:33
При очистки выделения высылается SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&))
и соответственно вызывается слот showSelectedItem( const QItemSelection & selected, const QItemSelection & deselected )

Ошибка скорее всего здесь:
Код:
void MainWindow::showSelectedItem( const QItemSelection & selected, const QItemSelection & deselected )
{
    QModelIndexList list = selected.indexes(); //list=QModelIndexList(), т.к. выделение пустое
    QModelIndex item;
    item = list[0]; //выход за пределы списка
    int row = item.row();
    ...
}
Если использовать list.at(0) - возникнет исключение, а так может на следующей строке.
Чтобы убедиться сделайте qDebug()<<selected.indexes();


Название: Re: Падает приложение при clearSelection();
Отправлено: NortT от Май 11, 2011, 02:48
При очистки выделения высылается SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&))
и соответственно вызывается слот showSelectedItem( const QItemSelection & selected, const QItemSelection & deselected )
Да, точно, так и оказалось, добавил в showSelectedItem
Код:
if (list.count()<1) return;
Cпасибо всем за участие :)


Название: Re: Падает приложение при clearSelection();
Отправлено: Пантер от Май 11, 2011, 07:15
лучше
Код
C++ (Qt)
if (list.isEmpty ()) {
 return;
}
 


Название: Re: Падает приложение при clearSelection();
Отправлено: NortT от Май 11, 2011, 08:11
Ок, переделал.