crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Лишние пробелы в QSqlQueryModel
decaprox
  опции профиля:
сообщение 5.2.2012, 13:09
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 5.2.2012
Пользователь №: 3200

Спасибо сказали: 1 раз(а)




Репутация:   0  


Здравствуйте, господа!
У меня следующая проблема: имеется некая БД, в которой есть таблица drivers, мне необходимо загрузить поле driver_name в QListView. Делаю следующим образом:
QSqlQueryModel *model = new QSqlQueryModel(this);
model->setQuery("SELECT driver_name FROM drivers WHERE is_deleted = false;", m_db);

listView->setModel(model);



Это, понятное дело, отлично работает. Но, т.к. поле объявлено, как
driver_name character(80);

В QListView попадают строки содержащие значение поля дополненные пробелами дп 80 символов. Как сделать, чтобы в список попадала только "полезная часть" значения поля?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 5.2.2012, 18:22
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Мне кажется, можно сделать так (не скажу на 100%, так как сейчас нет под рукой Qt, могу проверить только завтра):
использовать модель класса-наследника от QSqlQueryModel, переопределив роли Qt::DisplayRole и Qt::EditRole.
Не уверена, какие из них Вам придется переопределить.
В моей программе пришлось
- для данных, отображаемых в QTableView, переопределять роль Qt::DisplayRole,
- для данных, отображаемых в QDataWidgetMapper, переопределять роль Qt::EditRole.
А у Вас примерно так:
#ifndef MYMODEL_H
#define MYMODEL_H

#include <QSqlQueryModel>

class MyModel : public QSqlQueryModel
{
    Q_OBJECT
public:
    MyModel(QObject *parent = 0);
    QVariant data(const QModelIndex &index,
                  int role = Qt::DisplayRole) const;
};

#endif // MYMODEL_H

#include <QtSql>

#include "mymodel.h"

MyModel::MyModel(QObject *parent) :
    QSqlQueryModel(parent)
{
}

QVariant MyModel::data(
        const QModelIndex &index,
        int role) const {

    QVariant value = QSqlQueryModel::data(index, role);

    switch (role) {

    case Qt::DisplayRole:
    case Qt::EditRole:
        if (index.column() == 0) //= 0, так как у Вас в запросе SELECT запрашивается только одно это поле
            return value.toString().trimmed(); //будут обрезаны начальные и конечные пробелы
        else
            return value;

    } //switch (role)

    return value;
}

Или изменить тип попя таблицы на VARCHAR(80).

Сообщение отредактировал Steklova Olga - 5.2.2012, 18:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
decaprox
  опции профиля:
сообщение 5.2.2012, 19:11
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 5.2.2012
Пользователь №: 3200

Спасибо сказали: 1 раз(а)




Репутация:   0  


Спасибо Вам, Ольга! Просто поправил БД))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.3.2024, 20:09