QSqlTableModel + QTableView + sort -> Debug ?, Стабильный вылет в Deb-g (MySQL) при сортировке |
Здравствуйте, гость ( Вход | Регистрация )
QSqlTableModel + QTableView + sort -> Debug ?, Стабильный вылет в Deb-g (MySQL) при сортировке |
JohnZ |
30.7.2015, 10:44
Сообщение
#1
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
Всем Здравия !
Прошу прощения если не в том разделе спрашиваю, может это к относится к MVC ... Можно будет перенести. Проблема следующая. Есть QSqlTableModel + QTableView. QSqlTableModel слегка изменена в плане видимых колонок, но думаю что это неважно. Если выводится таблица полностью, т.е. без фильтра, сортировка по нажатию на заголовок колонки работает без проблем, но если включен фильтр ( model->setFilter(Str); ) и попытке сортировать, имеем стабильный вылет в Debug, причём вылетает где-то в недрах драйвера MySQL по нулевому указателю. Где копать ? Если нужна модель, - выложу, но как я уже сказал, изменения минимальны, да и без фильтра ведь работает ... Помогите plz кто в сталкивался или в курсе. |
|
|
lanz |
30.7.2015, 12:12
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Такие изменения (в плане видимых колонок и т.п.) лучше делать через отдельную модель, которая оборачивает исходную, потому что там много ньюансов и тонкостей с индексами, персистентными индексами и прочей модельной магией.
Копайте в сторону невалидных и испорченных индексов. |
|
|
JohnZ |
30.7.2015, 12:47
Сообщение
#3
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
Так и есть, создана отдельная модель. Индексы вообще не трогаю Вот её h- файл
Раскрывающийся текст #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 |
|
|
lanz |
30.7.2015, 13:17
Сообщение
#4
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Проблема обычно в новом коде, вряд ли в драйвере.
А как вы меняете видимые колонки? |
|
|
JohnZ |
30.7.2015, 15:56
Сообщение
#5
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
Проблема обычно в новом коде, вряд ли в драйвере. А как вы меняете видимые колонки? Согласно заданного списка. Раскрывающийся текст #include "fptablemodel.h" fpTableModel::fpTableModel(QObject * parent, QSqlDatabase db) : QSqlTableModel(parent, db) { colsInList = colsInForm = 0; } fpTableModel::~fpTableModel() { } void fpTableModel::setTable ( const QString & tableName ) { QSqlTableModel::setTable ( tableName ); setEditStrategy(QSqlTableModel::OnRowChange); // setEditStrategy(QSqlTableModel::OnManualSubmit); // select(); colsInList = colsInForm = QSqlTableModel::columnCount(); } void fpTableModel::setDefFields(QStringList &df) { DefFields = df; colsInList = df.count(); } void fpTableModel::setFilter(const QString & filter) { QSqlTableModel::setFilter ( filter ); select(); } В общем-то ничего особенного, просто запоминаю переданный список, согласно которого потом в форме создаю колонки из этого списка. Если установки небыло, тогда показываются все колонки, т.е. вся таблица. |
|
|
JohnZ |
30.7.2015, 16:57
Сообщение
#6
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
У Р А ! Нашёл ! Оказалось ошибка в СКРИПТЕ была !!!
2 дня угрохал на точку с запятой. Ведь в действительности я её ставил перед ORDER BY ... при заданной сортировке. Когда сортировка отключена была, ORDER BY в SELECT-е небыло. Дальше думаю понятно. LANZ - СПАСИБО ЗА УЧАСТИЕ. Твой вопрос натолкнул на правильную мыслю ... СПАСИБО !!! Тема закрыта. |
|
|
Текстовая версия | Сейчас: 22.11.2024, 0:48 |