Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT] QAbstractTableModel, настраиваем чекбоксы 
V
    Опции темы
Kappac
Дата 27.2.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 30.9.2006
Где: Украина, Киев

Репутация: нет
Всего: нет



Доброго времени суток! 
Есть класс унаследованный от QAbstarctTableModel и есть QTableView, при подключении унаследованной модели к QTableView в каждой ячейке появляются чекбоксы.
Вопрос: как их(чекбоксы) убрать? 
--------------------
                                                                                     
PM MAIL ICQ Skype   Вверх
nickless
Дата 27.2.2008, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 13
Всего: 181



Kappac, а подробнее можно? Какого типа данные в ячейках, что меняет унаследованый класс... а лучше давай примерчик с урезаным кодом.


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Kappac
Дата 27.2.2008, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 30.9.2006
Где: Украина, Киев

Репутация: нет
Всего: нет



Вот реализация:
Код

MyModel::MyModel(QObject * parent) : QAbstractTableModel(parent) {
    list.append(QStringList() << "first" << "second");
}

MyModel::~MyModel() {
    
}

int MyModel::columnCount(const QModelIndex & parent) const {
    return 2;
}

Qt::ItemFlags MyModel::flags(const QModelIndex &index) const {
    if(index.isValid())
        return Qt::ItemIsEnabled;
}

QVariant MyModel::data(const QModelIndex &index, int role) const{
    if(!index.isValid())
        return QVariant();
    
    return list.at(index.row()).at(index.column());
}

QVariant MyModel::headerData(int section, Qt::Orientation orientation, int role) const {
    if(role != Qt::DisplayRole)
        return QVariant();
    
    if(orientation == Qt::Horizontal) 
        return tr("Column %1").arg(section);
    else
        return tr("Row %1").arg(section);
}

int MyModel::rowCount(const QModelIndex & parent) const {
    return list.count();
}

--------------------
                                                                                     
PM MAIL ICQ Skype   Вверх
nickless
Дата 27.2.2008, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 13
Всего: 181



Код

Qt::ItemFlags MyModel::flags(const QModelIndex &index) const {
    if(! index.isValid())
        return Qt::ItemIsEnabled;
    return QAbstractItemModel::flags(index);
}
QVariant MyModel::data(const QModelIndex &index, int role) const{
    if(!index.isValid())
        return QVariant();

    if(role != Qt::DisplayRole)
        return QVariant();
    
    return list.at(index.row()).at(index.column());
}


Это сообщение отредактировал(а) nickless - 27.2.2008, 17:39


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Kappac
Дата 27.2.2008, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 30.9.2006
Где: Украина, Киев

Репутация: нет
Всего: нет



Не подходит такой вариант... Очень бы хотелось узнать, где настраивается тип элемента в ячейке, как это делается в QTableWidget? 
--------------------
                                                                                     
PM MAIL ICQ Skype   Вверх
nickless
Дата 27.2.2008, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 13
Всего: 181



Цитата(Kappac @  27.2.2008,  15:55 Найти цитируемый пост)
Очень бы хотелось узнать, где настраивается тип элемента в ячейке

А что нужно показывать? Если тип и отображение стандартное, то просто нужно возвращать нужные данные в зависимости от роли, если на запрос данных с какой-нибудь ролью вернуть QVariant(), то используется дефолт, если вернуть что-нибуть вразумительное, то оно (фонт, цвет итд) и будет использоваться.
Кроме того в flags() нужно возвращать возможности модели, они тоже влияют на отображение (Qt::ItemIsTristate итд).

Например чекбоксы управляются Qt::CheckStateRole,
Код

QVariant MyModel::data(const QModelIndex &index, int role) const{
    if(!index.isValid())
        return QVariant();

    if (role == Qt::CheckStateRole && index.column() == 0)
        return true;

    if(role != Qt::DisplayRole)
        return QVariant();
    
    return list.at(index.row()).at(index.column());
}

покажет чекбоксы в первой колонке.


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Kappac
Дата 27.2.2008, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 30.9.2006
Где: Украина, Киев

Репутация: нет
Всего: нет



nickless, огромное спасибо за вразумительный ответ! 

Это сообщение отредактировал(а) Kappac - 27.2.2008, 22:52
--------------------
                                                                                     
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0709 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.