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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Фильтры  (Прочитано 13557 раз)
Astrologer
Гость
« Ответ #15 : Сентябрь 15, 2010, 16:36 »

сунуть комбо бокс в хидер и все...

Как?
Записан
crossly
Гость
« Ответ #16 : Сентябрь 15, 2010, 18:26 »

http://www.prog.org.ru/topic_6921_0.html
Записан
Astrologer
Гость
« Ответ #17 : Сентябрь 16, 2010, 09:24 »

Пытаюсь отсортировать QSqlQuery
Код:

//  QSortFilterProxyModel *proxyModel;
// QSqlQueryModel* model
//QTableView* view
void QDbfReader::sort(int index)
{
  proxyModel->setSourceModel(model);
  view->setModel(proxyModel);
  proxyModel->setFilterKeyColumn(index);
}

Не работает((
Записан
Kolobok
Гость
« Ответ #18 : Сентябрь 16, 2010, 11:03 »

Читай документацию внимательнее.

Код:
void QSortFilterProxyModel::sort ( int column, Qt::SortOrder order = Qt::AscendingOrder ) 
Записан
Astrologer
Гость
« Ответ #19 : Сентябрь 16, 2010, 11:08 »

Спасибо, не усмотрел сразу.

У меня поля все текстовые, в которых может быть числа и при сортировке получается что то вроде "1541.6", "232", "310", "810", ....
« Последнее редактирование: Сентябрь 16, 2010, 11:11 от Astrologer » Записан
Kolobok
Гость
« Ответ #20 : Сентябрь 16, 2010, 11:23 »

Переопредели

Код:
bool QSortFilterProxyModel::lessThan ( const QModelIndex & left, const QModelIndex & right ) const 

или

Код:
QVariant QAbstractItemModel::data ( const QModelIndex & index, int role = Qt::DisplayRole ) const

в основной модели.
Записан
Astrologer
Гость
« Ответ #21 : Сентябрь 17, 2010, 09:29 »

А если пойти другим путем, по этому мне не все понятно, как переопределять чтобы конвертило поле во float или int. Можно ли с помощью SQL команды изменить тип поля скажем с text на real?
« Последнее редактирование: Сентябрь 17, 2010, 09:47 от Astrologer » Записан
Astrologer
Гость
« Ответ #22 : Сентябрь 17, 2010, 10:08 »

Переопредели

Код:
bool QSortFilterProxyModel::lessThan ( const QModelIndex & left, const QModelIndex & right ) const 

или

Код:
QVariant QAbstractItemModel::data ( const QModelIndex & index, int role = Qt::DisplayRole ) const

в основной модели.

А можно капельку поподробнее? Я еще новичок в этом деле!
Записан
Kolobok
Гость
« Ответ #23 : Сентябрь 17, 2010, 10:12 »

А если пойти другим путем, по этому мне не все понятно, как переопределять чтобы конвертило поле во float или int.

Код:
QVariant SqlQueryModel::data ( const QModelIndex & index, int role = Qt::DisplayRole ) const
{
  QVariant v = QSqlQueryModel::data ( index, role );
  switch(role)
  {
    case Qt::DisplayRole:
    case Qt::EditRole:
    {
      if( v.canConvert( QVariant::Double ) )
        return v.toDouble();
    }
  }
  return v;
}

Можно ли с помощью SQL команды изменить тип поля скажем с text на real?

Читай про alter table.
Записан
Astrologer
Гость
« Ответ #24 : Сентябрь 17, 2010, 12:48 »

QSqlQuery data уже перегружен. Сделал через проксифильтр.
Код:
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;
}


Проблема в том, что
Код:
canConvert(QVariant::Double)
возвращает true, даже если на входе QVariant со значением "Текст". Для этого я и сделал такую завитушку.
« Последнее редактирование: Сентябрь 17, 2010, 12:54 от Astrologer » Записан
Kolobok
Гость
« Ответ #25 : Сентябрь 17, 2010, 13:44 »

Если есть возможность, лучше решить на уровне БД.
Записан
MoPDoBoPoT
Гость
« Ответ #26 : Сентябрь 17, 2010, 13:50 »

Проблема в том, что
Код:
canConvert(QVariant::Double)
возвращает true, даже если на входе QVariant со значением "Текст". Для этого я и сделал такую завитушку.
canConvert(QVariant::Int) туда же... Тоже приходилось извращаться через toDouble(&ok).
Windows XP, Qt 4.5.2
Записан
Kolobok
Гость
« Ответ #27 : Сентябрь 17, 2010, 14:39 »

Да, судя по коду canConvert() сравнивает типы данных, а не значения. В этом случае остается только toDouble(&ok).
Записан
Astrologer
Гость
« Ответ #28 : Сентябрь 23, 2010, 12:11 »

Кстати Sqlite не поддерживает ALTER TABLE.

http://www.sqlite.org/lang_altertable.html

SQLite supports a limited subset of ALTER TABLE. The ALTER TABLE command in SQLite allows the user to rename a table or to add a new column to an existing table. It is not possible to rename a column, remove a column, or add or remove constraints from a table.
Записан
crossly
Гость
« Ответ #29 : Сентябрь 23, 2010, 12:21 »

точнее поддерживает но не полностью...
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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