Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SQL запрос в делегате.
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
smartchecker
Пишу делегата для 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
1. не совсем понятно, что нужно сделать
2. примерно так: lId = modelBooks.index( formatIndex .row(), modelBooks.fieldIndex("id")).data().toLongLong();
smartchecker
Цитата(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
У класса QSqlRelationalTableModel есть такой замечательный метод как QSqlRelationalTableModel::relationModel, который возвращает модель таблицы formats. С помощью него ты сможешь получить доступ к таблице formats и всем её индексам.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.