QSqlTableModel вертикальный заголовок

Всем привет, пытаюсь сделать таблицу, в которой будет всегда 1 запись из SQL-запроса. В этой таблице хочу сделать вертикальные заголовки, всё проделываю через подкласс модели QSqlTableModel, но, очевидно, что такой код неправильный...

Вопрос: можно ли это сделать и как, если да? Подскажите, пожалуйста.

qsqlsuppliermodel.h:

#ifndef SQLSUPPLIERMODEL_H
#define SQLSUPPLIERMODEL_H

#include <QSqlTableModel>
#include <QDebug>

class SqlSupplierModel : public QSqlTableModel {
public:
    explicit SqlSupplierModel(QObject* parent = nullptr);
protected:
    QVariant headerData(int nSection, Qt::Orientation orientation, int role) const override;
    int rowCount(const QModelIndex &parent = QModelIndex()) const override;
    int columnCount(const QModelIndex &parent = QModelIndex()) const override;
};

#endif // SQLSUPPLIERMODEL_H

qsqlsuppliermodel.cpp:

#include "sqlsuppliermodel.h"
#include <QFont>

SqlSupplierModel::SqlSupplierModel(QObject* parent) : QSqlTableModel(parent) {
}

int SqlSupplierModel::rowCount(const QModelIndex&) const {
    return 7;
}

int SqlSupplierModel::columnCount(const QModelIndex&) const {
    return 1;
}

QVariant SqlSupplierModel::headerData(int nSection, Qt::Orientation orientation, int role) const {
    if (orientation == Qt::Horizontal || (role != Qt::DisplayRole && role != Qt::FontRole))
        return QVariant();

    if (role == Qt::FontRole) {
        QFont font;
        font.setBold(true);
        return font;
    }

    switch(nSection) {
        case 0: return "Название";
        case 1: return "Адрес";
        case 2: return "Телефон";
        case 3: return "Факс";
        case 4: return "Директор";
        case 5: return "Бухгалтер";
        case 6: return "Расчетный счет";
        case 7: return "ИНН";
        default:
            return QVariant();
    }
}

Заполнение модели идёт через запрос в таблицу поставщиков, там устанавливается фильтр на первичный ключ - код поставщика, поэтому вернётся 1 запись.

_sqlSupplierModel = make_unique<SqlSupplierModel>(this);
_sqlSupplierModel->setTable("suppliers");

_sqlSupplierModel->setEditStrategy(QSqlTableModel::OnManualSubmit);

_sqlSupplierModel->select();
_sqlSupplierModel->setFilter("code = '" + _supplierCode + "'");
ui->supplierInfo->setModel(_sqlSupplierModel.get());

Результат: введите сюда описание изображения


Ответы (1 шт):

Автор решения: Глеб Труфанов

QTransposeProxyModel помог (спасибо Fat-Zer)

_sqlSupplierModel = make_unique<SqlSupplierModel>(this);
_sqlSupplierModel->setTable("suppliers");
_sqlSupplierModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
_sqlSupplierModel->select();
_sqlSupplierModel->setFilter("code = '" + _supplierCode + "'");
_sqlSupplierModel->removeColumn(_sqlSupplierModel->columnCount() - 1);

_sqlSupplierTransposeModel = make_unique<QTransposeProxyModel>();
_sqlSupplierTransposeModel->setSourceModel(_sqlSupplierModel.get());

_numberFormatDelegate = make_unique<SqlSupplierNumberFormatDelegate>();

ui->supplierInfo->setItemDelegate(_numberFormatDelegate.get());
ui->supplierInfo->setModel(_sqlSupplierTransposeModel.get());
→ Ссылка