crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> SQL запрос в делегате.
smartchecker
  опции профиля:
сообщение 31.5.2012, 10:51
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 83
Регистрация: 7.9.2011
Пользователь №: 2853

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




Репутация:   0  


Пишу делегата для QWidgetMapper'а.

Модель описана так.
    modelBooks = new QSqlRelationalTableModel(this, db);
    modelBooks->setTable("books");
    modelBooks->setEditStrategy(QSqlTableModel::OnManualSubmit);

    formatIndex = modelBooks->fieldIndex("format_id");
    modelBooks->setRelation(formatIndex, QSqlRelation("formats", "id", "format"));

В таблице formats есть поле mimetype.
Два вопроса.
1. Как в делегате подсунуть вместо поля format поле mimetype? Надо ли для этого SQL писать запрос?
2. как в делегате из QModelIndex'а получить значение поля id из таблицы books?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 31.5.2012, 11:49
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


1. не совсем понятно, что нужно сделать
2. примерно так: lId = modelBooks.index( formatIndex .row(), modelBooks.fieldIndex("id")).data().toLongLong();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
smartchecker
  опции профиля:
сообщение 31.5.2012, 13:37
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 83
Регистрация: 7.9.2011
Пользователь №: 2853

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




Репутация:   0  


Цитата(ViGOur @ 31.5.2012, 12:49) *
1. не совсем понятно, что нужно сделать
2. примерно так: lId = modelBooks.index( formatIndex .row(), modelBooks.fieldIndex("id")).data().toLongLong();

Может я криво выразился :huh:
Есть делегат

void MapperDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    QLabelEx *lab = qobject_cast<QLabelEx*>(editor);
    QImage img;
    QPixmap px;
    QSqlQuery query;

    if (!lab) {
        QItemDelegate::setEditorData(editor, index);
        return;
    }

    switch (index.column()) {
        case 7:
                img.loadFromData(index.data().toByteArray());
                px = QPixmap::fromImage(img);
                lab->setPixmap(px.scaled(128, 128, Qt::KeepAspectRatio));
                break;

        case 12:
                query = QSqlQuery(QSqlDatabase::defaultConnection);
                query.prepare("SELECT mimetype FROM formats WHERE format=:format");
                query.bindValue(":format", index.model()->data(index, Qt::EditRole).toString());
                query.exec();
                query.next();
                img.loadFromData(query.value(0).toByteArray());
                px = QPixmap::fromImage(img);
                lab->setPixmap(px.scaled(50, 50, Qt::KeepAspectRatio));
                break;

        default:
                QItemDelegate::setEditorData(editor, index);
                return;
    }
}

Можно ли до поля mimetype дотянуться как-то иначе(не делая запрос)?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 31.5.2012, 14:32
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


У класса QSqlRelationalTableModel есть такой замечательный метод как QSqlRelationalTableModel::relationModel, который возвращает модель таблицы formats. С помощью него ты сможешь получить доступ к таблице formats и всем её индексам.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.12.2024, 7:31