Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Жора от Август 27, 2012, 13:23



Название: перерисовать таблицу во время работы программы с помощью proxyModel
Отправлено: Жора от Август 27, 2012, 13:23
Добрый день.

Есть своя модель унаследованная от QAbstractTableModel.
Есть своя прокси модель унаследованная от QSortFilterProxyModel.
Перегрузил функцию filterAcceptsRow, для фильтрации по строкам.
При первом запуске фильтруется все хорошо, значения, по которым надо фильтровать беру из comboBox.

При выборе другого значения из combobox обрабатываю событие:

Код:
void MainWindow::onCurrentIndexChanged(QString text)

Что нужно выполнить по этому событию, что б перерисовалась таблица, с другим значением для поиска?


Название: Re: перерисовать таблицу во время работы программы с помощью proxyModel
Отправлено: mutineer от Август 27, 2012, 13:52
void QSortFilterProxyModel::invalidate () [slot]


Название: Re: перерисовать таблицу во время работы программы с помощью proxyModel
Отправлено: Жора от Август 27, 2012, 14:04
Спасибо! Все работает.

Может еще ответите на 1 вопрос. Почему пока не переопределил сигнал dataChanged. программа складывалать при вызове emit dataChanged(QModelIndex,QModelIndex)
Код:
void ProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
{
    QAbstractProxyModel::setSourceModel(sourceModel);

    connect(sourceModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
                this, SLOT(dataChangeSlot(QModelIndex,QModelIndex)));
}


void ProxyModel::dataChangeSlot(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
    emit dataChanged(topLeft,bottomRight);
}

или хотя бы где нужно покапать. Спасибо.


Название: Re: перерисовать таблицу во время работы программы с помощью proxyModel
Отправлено: mutineer от Август 27, 2012, 14:40
В каком смысле "перепределил сигнал"?
Что значит "программа складывалась"?


Название: Re: перерисовать таблицу во время работы программы с помощью proxyModel
Отправлено: Жора от Август 27, 2012, 16:10
Цитировать
В каком смысле "перепределил сигнал"?
Код:
void ProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
{
    QAbstractProxyModel::setSourceModel(sourceModel);

    connect(sourceModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
                this, SLOT(dataChangeSlot(QModelIndex,QModelIndex)));
}


void ProxyModel::dataChangeSlot(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
    emit dataChanged(topLeft,bottomRight);
}

Цитировать
Что значит "программа складывалась"?
Выскакивает ошибка, как на вложенной картинке.


Название: Re: перерисовать таблицу во время работы программы с помощью proxyModel
Отправлено: mutineer от Август 27, 2012, 16:16
Вообще твой код не особо корректен, потому что индексы внутренней модели после фильтрации и сортировки не совпадают с индексами модели-фильтра, и выкидывать их наружу неверно.

Почему оно падало при выполнении кода, который я не вижу, я сказать не могу