Название: Модель и ее отображение Отправлено: vasasol от Октябрь 14, 2008, 23:44 Здравствуйте!
Вот столкнулся (QT4.4) сделал свою модель с фильтром Код: class mod_oper : public QSqlQueryModel { Код: // реализация фильтра и чем ее смотреть (морду) Код: class oper_view : public QTableView { в конструкторе моей формы (myform) Код: oper_v = new oper_view(this); добавляю запись к модели и потом делаю ей фильтр Код: void myform::add() { и на морде вижу появление всех колонок, которыe в конструкторе hideColumn(), которые вроде-бы не должны появляться :( ... Я что-то забыл или не так сделал? Название: Re: Модель и ее отображение Отправлено: ритт от Октябрь 15, 2008, 01:59 сколько колонок после кода `oper_v->setModel(m_oper)` и сколько после `m_oper->refresh("параметр1","параметр2","параметр3")` ?
Название: Re: Модель и ее отображение Отправлено: vasasol от Октябрь 15, 2008, 02:08 после oper_v->setModel(m_oper) но до их скрытия и после m_oper->refresh("параметр1","параметр2","параметр3") одинаково - по 14
Название: Re: Модель и ее отображение Отправлено: vasasol от Октябрь 15, 2008, 02:12 еще точнее: после добавления записи но перед m_oper->refresh("параметр1","параметр2","параметр3") - 7 колонок, после m_oper->refresh("параметр1","параметр2","параметр3") - 14ю и кстати ширина их ........ меняется
Название: Re: Модель и ее отображение Отправлено: ритт от Октябрь 15, 2008, 13:19 после выполнения
setQuery("select ВСЯКИЕ_ПОЛЯ from ОТКУДА where (kod_id="+f+") and (dta='"+dbeg+"') and (dto='"+dend+"')"); модель сбросится и колонки снова станут видимыми. сейчас в код не полезу, но если правильно помню, setQuery(...) не сравнивает старый запрос и новый, а полностью перезапрашивает данные. если "ВСЯКИЕ_ПОЛЯ" - это все поля таблицы, то самое простое решение - возьми за основную модель QSqlTableModel. Название: Re: Модель и ее отображение Отправлено: vasasol от Октябрь 15, 2008, 14:15 "ВСЯКИЕ_ПОЛЯ" - это не все поля таблицы, а QSqlTableModel не совсем удобно .....
Название: Re: Модель и ее отображение Отправлено: ритт от Октябрь 15, 2008, 14:32 заглянул в код - проверка выполняется.
не понимаю как до setQuery может быть 7 столбцов, а после - 14. до setQuery должно быть 0 столбцов. Название: Re: Модель и ее отображение Отправлено: vasasol от Октябрь 15, 2008, 14:39 ну 7 полей должно быть потому-что в морде остальные hidden. кстати, после удаления данных и применения фильтра морда не меняется - все теже 7 полей ...:(
Название: Re: Модель и ее отображение Отправлено: ритт от Октябрь 15, 2008, 14:57 должно быть 0.
разве что, ты в конструкторе зовёшь setQuery, но это был бы уже изврат какой-то... Название: Re: Модель и ее отображение Отправлено: vasasol от Октябрь 15, 2008, 17:11 Да нет, не делаю ...... ну и как-то не вписывается удаление - такого эффекта (появления столбцов) при удалении нет....
Название: Re: Модель и ее отображение Отправлено: ритт от Октябрь 15, 2008, 17:18 я уже теряю тему разговора.
надоело уже угадывать где/как/что... выкладывай компилябельный пример - будем смотреть. Название: Re: Модель и ее отображение Отправлено: EhTemka от Октябрь 16, 2008, 17:05 Цитировать Код: oper_v = new oper_view(this); добавляю запись к модели и потом делаю ей фильтр в момент когда ты делаешь oper_v->hideColumn(x) у тебя скорее всего никаких колонок нет. Попробуй вставить между строками: Код: ... count должен быть ноль, так как неоткуда там взятся колонкам (если конечно ты их вручную не создаешь в конструкторе. А если так, то setQuery их убивает) Делай oper_v->hideColumn() после refresh(...): Код: void myform::add() { или там, где вызываешь myform::add() или приконется к сигналу columnsInserted(const QModelIndex & parent, int start, int end) у модели и уже в слоте скрывай колонки. Так кстати наверно будет правильней, потому как при неизменном запросе колонки вставляются один раз. и еще не совсем понятна эта фраза... Цитировать добавляю запись к модели и потом делаю ей фильтр Название: Re: Модель и ее отображение Отправлено: vasasol от Октябрь 16, 2008, 17:47 Цитировать или приконется к сигналу columnsInserted(const QModelIndex & parent, int start, int end) у модели и уже в слоте скрывай колонки. Пасиб. Это работает.Так кстати наверно будет правильней, потому как при неизменном запросе колонки вставляются один раз. Цитировать и еще не совсем понятна эта фраза... Ну описанный эффект проявляется в случае добавления записи, т.е. я сделал INSERT INTO таблице, потом Цитировать добавляю запись к модели и потом делаю ей фильтр m_oper->refresh("параметр1","параметр2","параметр3") а если DELETE FROM из оттуда и потом m_oper->refresh("параметр1","параметр2","параметр3") - все пучком - и записи удалились и колонки не появились. |