Russian Qt Forum

Qt => Model-View (MV) => Тема начата: sergeyvl12 от Август 23, 2009, 19:20



Название: [РЕШЕНО] QTableView - выводятся CheckBox'ы ???
Отправлено: sergeyvl12 от Август 23, 2009, 19:20
Добрый день. Очень надо разобраться со связкой QTableView - QAbstractTableModel. Создал простейшую модель таблицы (код см. ниже), прикрутил ее к стандартному QTableView...
Все работает норм (данные выводятся) но почему-то во всех ячейках слева от значений стоят квадратики (я так понял что это чекбоксы). Странное поведение по умолчанию... Подскажите как от них избавиться?

Код:
class PersonalInfoTableModel: public QAbstractTableModel
{
    std::vector<PersonalInfo>& data_;
public:
    PersonalInfoTableModel( std::vector<PersonalInfo>& data )
        : data_(data)
    {}
public:
    int rowCount ( const QModelIndex & parent = QModelIndex() ) const
    {
        data_.size();
    }
    int columnCount ( const QModelIndex & parent = QModelIndex() ) const
    {
        return 3;
    }
    QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const
    {
        return QVariant(QDate(2009,8,21));
    }
    //Qt::ItemFlags flags ( const QModelIndex & index ) const
    //{
    //    return Qt::ItemIsEnabled;
    //}
    bool insertRows ( int row, int count, const QModelIndex & parent = QModelIndex() )
    {
        PersonalInfo info;
        info.name = "Sergey";
        info.age  = 30;
        info.salary = 100000;
        beginInsertRows(parent,data_.size(),data_.size());
        data_.push_back(info);
        endInsertRows();
        return true;
    }
};


Название: Re: QTableView - выводятся CheckBox'ы ???
Отправлено: BRE от Август 23, 2009, 19:25
Добрый день. Очень надо разобраться со связкой QTableView - QAbstractTableModel. Создал простейшую модель таблицы (код см. ниже), прикрутил ее к стандартному QTableView...
Все работает норм (данные выводятся) но почему-то во всех ячейках слева от значений стоят квадратики (я так понял что это чекбоксы). Странное поведение по умолчанию... Подскажите как от них избавиться?
В методе data нужно возвращать определенные значения для каждой роли или вызвать метод базового класса.
Код
C++ (Qt)
   QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const
   {
if( role == Qt::DisplayRole )
       return QVariant(QDate(2009,8,21));
return QAbstractTableModel::data( index, role );
   }
 


Название: Re: QTableView - выводятся CheckBox'ы ???
Отправлено: sergeyvl12 от Август 23, 2009, 19:38
Судя по документации:

QAbstractTableModel::data() - такой функции нет.
QAbstractItemModel::data() - чисто виртуальная функция.

Как следствие - ошибка при линковке :)


Название: Re: QTableView - выводятся CheckBox'ы ???
Отправлено: denka от Август 23, 2009, 19:59
Возвращай QVariant(), то есть так:

Код:
    QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const
    {
if( role == Qt::DisplayRole )
        return QVariant(QDate(2009,8,21));
return QVariant();
    }


Название: Re: QTableView - выводятся CheckBox'ы ???
Отправлено: BRE от Август 23, 2009, 20:07
Судя по документации:

QAbstractTableModel::data() - такой функции нет.
QAbstractItemModel::data() - чисто виртуальная функция.

Как следствие - ошибка при линковке :)

Упс, сори зарапортовался.  ;)


Название: Re: QTableView - выводятся CheckBox'ы ???
Отправлено: sergeyvl12 от Август 23, 2009, 22:06
Спасибо: BRE, den'ka

Попутно узнал что за чекбокс отвечает Qt::CheckStateRole. Видимо мою дату он принимал за "false" потому что квадратики были "unchecked".