Russian Qt Forum
Ноябрь 23, 2024, 04:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QTableView - выводятся CheckBox'ы ???  (Прочитано 11322 раз)
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;
    }
};
« Последнее редактирование: Август 26, 2009, 12:14 от sergeyvl12 » Записан
BRE
Гость
« Ответ #1 : Август 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 );
   }
 
Записан
sergeyvl12
Гость
« Ответ #2 : Август 23, 2009, 19:38 »

Судя по документации:

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

Как следствие - ошибка при линковке Улыбающийся
Записан
denka
Гость
« Ответ #3 : Август 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();
    }
Записан
BRE
Гость
« Ответ #4 : Август 23, 2009, 20:07 »

Судя по документации:

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

Как следствие - ошибка при линковке Улыбающийся

Упс, сори зарапортовался.  Подмигивающий
Записан
sergeyvl12
Гость
« Ответ #5 : Август 23, 2009, 22:06 »

Спасибо: BRE, den'ka

Попутно узнал что за чекбокс отвечает Qt::CheckStateRole. Видимо мою дату он принимал за "false" потому что квадратики были "unchecked".
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.095 секунд. Запросов: 21.