Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Astrologer от Ноябрь 01, 2010, 13:11



Название: Ошибка после сортировки в QSqlQueryModel
Отправлено: 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 - пустая.

В чем тут дело? Не могу никак понять! Заранее спасибо.


Название: Re: Ошибка после сортировки в QSqlQueryModel
Отправлено: Whiplash от Ноябрь 01, 2010, 17:56
Погди-погоди... Т.е. по факту вьюхе присваивается модель типа MySortModel, которая унаследована от QSortFilterProxyModel. Но от того, что ты явно преобразуешь указатель на MySortModel в указатель на QSqlQueryModel метод record() там не появится.
ИМХО, стоит сделать примерно так:
Код:
 myModel = (MySortModel*)view->model();
 QSqlQueryModel *mySqlModel=(QSqlQueryModel*)myModel->sourceModel ();
  int nof = mySqlModel->record(0).count();


Название: Re: Ошибка после сортировки в QSqlQueryModel
Отправлено: Astrologer от Ноябрь 02, 2010, 10:12
Спасибо. Теперь не вылетает, однако порядок следования записей не такой какой должен быть и не совпадает с тем, что отображается в QTableView. ???


Название: Re: Ошибка после сортировки в QSqlQueryModel
Отправлено: Whiplash от Ноябрь 03, 2010, 12:50
Ну, тут фиг знает, чего посоветовать. Я сортирую не через прокси, а в самом запросе.