Russian Qt Forum

Qt => Базы данных => Тема начата: alex-v от Март 11, 2011, 10:23



Название: Checkbox-ы в QTableView как убрать?
Отправлено: alex-v от Март 11, 2011, 10:23
...было все ОК пока использовал стандартную модель QSqlTableModel.
Но когда я наследовал от неё свой класс, чтобы переопределить метод data(), то в ячейках таблицы вместе с текстом стали выводиться еще и чекбоксы :).
Как от них избавиться?

Код:
#ifndef ORDERSMODEL_H
#define ORDERSMODEL_H

#include <QSqlTableModel>

class OrdersModel : public QSqlTableModel
{
    Q_OBJECT
public:
    explicit OrdersModel(QObject *parent = 0);

private:
    QVariant data(const QModelIndex &item, int role=Qt::DisplayRole) const;
};

#endif // ORDERSMODEL_H

Код:
#include "OrdersModel.h"


OrdersModel::OrdersModel(QObject *parent) :
    QSqlTableModel(parent)
{
}
//---------------------------------------------------------------------

QVariant OrdersModel::data(const QModelIndex &item, int role) const
{
    return QString("test");
}
//---------------------------------------------------------------------



Название: Re: Checkbox-ы в QTableView как убрать?
Отправлено: Пантер от Март 11, 2011, 10:29
Переопредели Qt::ItemFlags QAbstractItemModel::flags ( const QModelIndex & index ) const


Название: Re: Checkbox-ы в QTableView как убрать?
Отправлено: alex-v от Март 11, 2011, 10:32
Пробовал.
Возвращаю отключённый флаг чекбокса - не помогло.

Код:
#include "OrdersModel.h"


OrdersModel::OrdersModel(QObject *parent) :
    QSqlTableModel(parent)
{
}
//---------------------------------------------------------------------

QVariant OrdersModel::data(const QModelIndex &item, int role) const
{
    return QString("test");
}
//---------------------------------------------------------------------

Qt::ItemFlags OrdersModel::flags(const QModelIndex &index) const
{
    return Qt::ItemIsEnabled;
}
//---------------------------------------------------------------------


Название: Re: Checkbox-ы в QTableView как убрать?
Отправлено: Пантер от Март 11, 2011, 10:33
А, тьфу, в data обработай Qt::CheckStateRole


Название: Re: Checkbox-ы в QTableView как убрать?
Отправлено: alex-v от Март 11, 2011, 10:55
точно. спасибо.

Еще бы одну проблемку решить - как заливать всю текущую строку синим фоном?
(раньше со стандартной моделью - работало. А теперь нет)


Название: Re: Checkbox-ы в QTableView как убрать?
Отправлено: Пантер от Март 11, 2011, 10:58
Qt::BackgroundColorRole, возможно. Вообще, почитай про роли.


Название: Re: Checkbox-ы в QTableView как убрать?
Отправлено: alex-v от Март 11, 2011, 11:03
Да. Читал.
Эту роль видел. Проблема в том - как определить в методе data() что ячейка находится в текущей строке...?


Название: Re: Checkbox-ы в QTableView как убрать?
Отправлено: Пантер от Март 11, 2011, 11:06
ЕМНИП, за окраску текущей ячейки отвечают вьюха или делегат.


Название: Re: Checkbox-ы в QTableView как убрать?
Отправлено: Disaron от Март 11, 2011, 23:46
На самом деле надо решить для себя, какую именно роль(и) надо переопределить. Для остального возвращать QSqlTableModel::data(item, role). Тогда лишнего переопределять не придется.


Название: Re: Checkbox-ы в QTableView как убрать?
Отправлено: chu от Март 12, 2011, 02:46
точно. спасибо.

Еще бы одну проблемку решить - как заливать всю текущую строку синим фоном?
(раньше со стандартной моделью - работало. А теперь нет)
м.б. так:
Код:
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);


Название: Re: Checkbox-ы в QTableView как убрать?
Отправлено: alex-v от Март 12, 2011, 09:20
Да, всё получилось. Всем спасибо.
Текущая строка не выделялась из-за того, что я переопределил метод flags(). Убрал его - и всё ОК.