Russian Qt Forum
Ноябрь 25, 2024, 01:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка после сортировки в QSqlQueryModel  (Прочитано 2868 раз)
Astrologer
Гость
« : Ноябрь 01, 2010, 13:11 »

Всем привет. Например есть QTableView с уже загруженной моделью.
1) Вариант. Не сортирую ничего.
Код
C++ (Qt)
QSqlQueryModel* myModel = new QSqlQueryModel(this);
   myModel = (QSqlQueryModel*)view->model();
   QString lastQuery = myModel()->query()->lastQuery();
   int nof = myModel->record(0).count();
 
Все работает. lastQuery - не пустая.
2) Сортировка посредством mySortModel.
MySortModel.cpp
Код
C++ (Qt)
#include "mysortmodel.h"
 
MySortModel::MySortModel(QObject *parent) :
   QSortFilterProxyModel(parent)
{
}
 
bool MySortModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
{
   QVariant leftData = sourceModel()->data(left);
   QVariant rightData = sourceModel()->data(right);
 
   if (leftData.canConvert(QVariant::Double))
   {
       bool ok1 = false;
       double a = leftData.toDouble(&ok1);
       double b = rightData.toDouble();
       if (ok1)
           return a < b;
   }
 
   if (leftData.canConvert(QVariant::String))
       return QString::localeAwareCompare(leftData.toString(), rightData.toString()) < 0;
}
 
MySortModel::~MySortModel()
{
   qDebug() << "Mysort model destructor";
}
 
 
Собственно сортировка.
Код
C++ (Qt)
void QDbfReader::sort(int index)
{
   proxyModel->setSourceModel(model);
   view->setModel(proxyModel);
 
   if (!proxyModel->sortOrder() == Qt::AscendingOrder)
       proxyModel->sort(index, Qt::DescendingOrder);
   else proxyModel->sort(index, Qt::AscendingOrder);
}
 
//где model = QSqlQueryModel, proxyModel = MySortModel;
 

Обращение -
Код
C++ (Qt)
QSqlQueryModel* myModel = new QSqlQueryModel(this);
   myModel = (QSqlQueryModel*)view->model();
   int nof = myModel->record(0).count();
   QString lastQuery = myModel()->query()->lastQuery();
 

НЕ работает.На определении nof вылетает. lastQuery - пустая.

В чем тут дело? Не могу никак понять! Заранее спасибо.
« Последнее редактирование: Ноябрь 01, 2010, 13:17 от Astrologer » Записан
Whiplash
Гость
« Ответ #1 : Ноябрь 01, 2010, 17:56 »

Погди-погоди... Т.е. по факту вьюхе присваивается модель типа MySortModel, которая унаследована от QSortFilterProxyModel. Но от того, что ты явно преобразуешь указатель на MySortModel в указатель на QSqlQueryModel метод record() там не появится.
ИМХО, стоит сделать примерно так:
Код:
 myModel = (MySortModel*)view->model();
 QSqlQueryModel *mySqlModel=(QSqlQueryModel*)myModel->sourceModel ();
  int nof = mySqlModel->record(0).count();
Записан
Astrologer
Гость
« Ответ #2 : Ноябрь 02, 2010, 10:12 »

Спасибо. Теперь не вылетает, однако порядок следования записей не такой какой должен быть и не совпадает с тем, что отображается в QTableView. Непонимающий
« Последнее редактирование: Ноябрь 02, 2010, 10:17 от Astrologer » Записан
Whiplash
Гость
« Ответ #3 : Ноябрь 03, 2010, 12:50 »

Ну, тут фиг знает, чего посоветовать. Я сортирую не через прокси, а в самом запросе.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.204 секунд. Запросов: 21.