Название: QSortFilterProxyModel вызывает data() со второго раза. Отправлено: djfile от Март 05, 2012, 14:28 Здравствуйте. Кратко об основном: пользователь вводит данные в основную таблицу, затем вводит ограничения по этим данным, основная модель все это переваривает и выдает номера строк которые наилучшим образом удовлетворяют условиям (такой частный случай многокритериальной оптимизации). Номера этих строк я передаю в наследника QSortFilterProxyModel, который по ним выдергивает из основной модели нужные строки.
Проблема: После первого нажатия на кнопку "Посчитать" для QSortFilterProxyModel выводится пустая таблица, в которой есть необходимое количество столбцов, но нет строк , после повторного нажатия и далее все замечательно работает. Как я понял понял при первом вызове не вызывается метод data(). Вот код: Код: #include "resultmodel.h" Название: Re: QSortFilterProxyModel вызывает data() со второго раза. Отправлено: mutineer от Март 05, 2012, 14:31 А как выглядит вывод в дебаг?
Название: Re: QSortFilterProxyModel вызывает data() со второго раза. Отправлено: Bepec от Март 05, 2012, 14:34 Он может вызываться аж по нескольким причинам.
Начнём - к примеру не передаётся, или неправильно передаётся число строк, если их 0, то он их и не запрашивает однако. m_resultRow - что это и откуда? Так же довольно интересная функция rowCount. Зачем тебе проверка на Empty, если size() всёравно вернёт 0??? Название: Re: QSortFilterProxyModel вызывает data() со второго раза. Отправлено: djfile от Март 05, 2012, 14:54 Задал вопрос, пошёл покурил, подумал... И вроде нашел в чем проблема=)
Поменял в методе расчета 2 строчки местами и все стало ок. Как было: Код: m_resultWindow->setSourceModel(m_pTableModel); Цитировать m_resultRow - что это и откуда? Тут хранятся индексы строк, которые выкинула основная модель в качестве подходящих.Цитировать Так же довольно интересная функция rowCount. Зачем тебе проверка на Empty, если size() всёравно вернёт 0??? Это я уже отчаяния.=)Но нашёл ещё один баг. Во время редактирования ячейки основной таблицы нажать на "Посчитать", то если пользователь не нажал на Enter, то в выходную таблицу может попасть строка с неправильными данными. Как при нажатии на "Посчитать" сначала закрыть редактор ячейки, отослать изменения и уже потом начать считать? |