Решено: Qt наследование от QAbstractTableModel

Модератор: Модераторы разделов

svas
Сообщения: 203

Решено: Qt наследование от QAbstractTableModel

Сообщение svas »

Хочу написать класс для отображения данных из базы данных в QTableView. Не использую QSqlQueryModel потому что база данных MS SQL, данные буду получать путем вызова процедур.
Почти все работает, данные отображаются, только в ячейках отбражаются еще флажки какие-то.
Переобределял функцию flags(...) не помогло. В прикрепленном скриншоте она возвращает 0.
Как убрать эти флажки?
Или можно как-нибудь использовать MS SQL и QSqlQueryModel-QSqlQuery c setForwardOnly(false)?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
svas
Сообщения: 203

Re: Решено: Qt наследование от QAbstractTableModel

Сообщение svas »

Извините, разобрался. Глупый вопрос.
Спасибо сказали:
Аватара пользователя
Atragor
Сообщения: 681
Статус: ...

Re: Решено: Qt наследование от QAbstractTableModel

Сообщение Atragor »

А как разобрались?
If you were MEANT to understand it, we wouldn't have called it 'code' © bash.org
Спасибо сказали:
svas
Сообщения: 203

Re: Решено: Qt наследование от QAbstractTableModel

Сообщение svas »

Нет не разобрался :(
Делаю так

Код: Выделить всё

QAbstractItemModel *exec(const QString &proc)
{
QSqlQueryModel *m = new QSqlQueryModel;
m->setQuery("EXEC "+proc);
return m;
}

....

tableView->setModel(exec("SOME_PROC"));


В tableView не видно ни одной записи, только названия столбцов.
Как правильно выполнить процедуру и возвратить QAbstractItemModel?
Или как убрать CheckBox'ы из таблицы при наследовании от QAbstractItemModel?
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Решено: Qt наследование от QAbstractTableModel

Сообщение Denjs »

У вас пример из "ассистанта" приведенный в статье про QSqlQueryModel работает?
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
svas
Сообщения: 203

Re: Решено: Qt наследование от QAbstractTableModel

Сообщение svas »

Да работает.

Полностью класс

Код: Выделить всё

class ViewDataModel : public QAbstractTableModel
{
    Q_OBJECT
public:
    ViewDataModel(QSqlQuery &q, QObject *parent=0):
            QAbstractTableModel(parent), mRowCount(0), mColumnCount(0)
    {
        mColumnCount = q.record().count();
        mData.resize(mColumnCount);
        while (q.next())
        {
            mRowCount++;
            for (int i=0; i<mColumnCount; ++i)
            {
                mData[i].push_back(q.value(i));
            }
        }
    }
    ~ViewDataModel() {}

    QVariant data(const QModelIndex &, int role = Qt::DisplayRole) const
    {
        if (!index.isValid())
            return QVariant();
        return mData[index.column()][index.row()];
    }

    Qt::ItemFlags flags(const QModelIndex &) const { return Qt::ItemIsSelectable | Qt::ItemIsEnabled; }

    int rowCount(const QModelIndex &parent = QModelIndex()) const
    {
        return parent.isValid() ? 0 : mRowCount;
    }

    int columnCount(const QModelIndex &parent = QModelIndex()) const
    {
        return parent.isValid() ? 0 : mColumnCount;
    }


private:
    int mRowCount;
    int mColumnCount;
    QVector<QVector<QVariant> > mData;
};
Спасибо сказали:
svas
Сообщения: 203

Re: Решено: Qt наследование от QAbstractTableModel

Сообщение svas »

Разобрался.
В функции data если role == Qt::DisplayRole возвращаю данные, иначе QVariant()
Спасибо сказали: