crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Тема закрытаНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 11.4.2025, 16:47