![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
JohnZ |
![]()
Сообщение
#1
|
Участник ![]() ![]() Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: ![]() ![]() ![]() |
Всем Здравия !
Прошу прощения если не в том разделе спрашиваю, может это к относится к MVC ... Можно будет перенести. Проблема следующая. Есть QSqlTableModel + QTableView. QSqlTableModel слегка изменена в плане видимых колонок, но думаю что это неважно. Если выводится таблица полностью, т.е. без фильтра, сортировка по нажатию на заголовок колонки работает без проблем, но если включен фильтр ( model->setFilter(Str); ) и попытке сортировать, имеем стабильный вылет в Debug, причём вылетает где-то в недрах драйвера MySQL по нулевому указателю. Где копать ? Если нужна модель, - выложу, но как я уже сказал, изменения минимальны, да и без фильтра ведь работает ... Помогите plz кто в сталкивался или в курсе. |
|
|
![]() |
lanz |
![]()
Сообщение
#2
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Такие изменения (в плане видимых колонок и т.п.) лучше делать через отдельную модель, которая оборачивает исходную, потому что там много ньюансов и тонкостей с индексами, персистентными индексами и прочей модельной магией.
Копайте в сторону невалидных и испорченных индексов. |
|
|
JohnZ |
![]()
Сообщение
#3
|
Участник ![]() ![]() Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: ![]() ![]() ![]() |
Так и есть, создана отдельная модель. Индексы вообще не трогаю
![]() Раскрывающийся текст #ifndef FPTABLEMODEL_H #define FPTABLEMODEL_H #include <QtGui> #include <QtSql> #include <QSqlTableModel> class fpTableModel : public QSqlTableModel { public: fpTableModel(QObject * parent = 0, QSqlDatabase db = QSqlDatabase()); ~fpTableModel(); void setTable ( const QString & tableName ); void setFilter(const QString & filter); // void setSort(int column, Qt::SortOrder order); void setDefFields(QStringList & df); private: int colsInList, colsInForm; QStringList DefFields, DefHeaders, ColWidth; }; #endif // FPTABLEMODEL_H Причина создания потомка , void setDefFields(QStringList & df); Тут определяется кол-во видимых колонк в QTableView. Я полагал что проблема в MySQL-ном драйвере qt, который при получении фильтра теряет указатель ?! Ведь по сути, установка фильтра, это всего-лишь добавление в секцию where, и за это отвечает драйвер. Модель-же получает уже готовый select. Сервер MySQL версии 4.1. Сообщение отредактировал JohnZ - 30.7.2015, 12:47 |
|
|
![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 11.4.2025, 16:47 |