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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: перерисовать таблицу во время работы программы с помощью proxyModel  (Прочитано 2663 раз)
Жора
Гость
« : Август 27, 2012, 13:23 »

Добрый день.

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

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

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

Что нужно выполнить по этому событию, что б перерисовалась таблица, с другим значением для поиска?
Записан
mutineer
Гость
« Ответ #1 : Август 27, 2012, 13:52 »

void QSortFilterProxyModel::invalidate () [slot]
Записан
Жора
Гость
« Ответ #2 : Август 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);
}

или хотя бы где нужно покапать. Спасибо.
Записан
mutineer
Гость
« Ответ #3 : Август 27, 2012, 14:40 »

В каком смысле "перепределил сигнал"?
Что значит "программа складывалась"?
Записан
Жора
Гость
« Ответ #4 : Август 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);
}

Цитировать
Что значит "программа складывалась"?
Выскакивает ошибка, как на вложенной картинке.
Записан
mutineer
Гость
« Ответ #5 : Август 27, 2012, 16:16 »

Вообще твой код не особо корректен, потому что индексы внутренней модели после фильтрации и сортировки не совпадают с индексами модели-фильтра, и выкидывать их наружу неверно.

Почему оно падало при выполнении кода, который я не вижу, я сказать не могу
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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