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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ещё пара вопросов по моделям  (Прочитано 3595 раз)
Ximik
Гость
« : Апрель 12, 2009, 19:04 »

1. Есть простая модель, основанная на QAbstractListModel. Есть делегат, с переопределённым paint

Код:
void partiesModelDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QStyleOptionButton checkBoxOption;
    checkBoxOption.rect = option.rect;
    checkBoxOption.state = QStyle::State_Active | QStyle::State_Enabled;
    checkBoxOption.text = index.data(Qt::DisplayRole).toString();
    QApplication::style()->drawControl(QStyle::CE_CheckBox, &checkBoxOption, painter);
}

В View'е вполне себе рисуется checkBox, но выбрать его (поставить галочку) нельзя. Вопрос, как это сделать и как потом этот сигнал перехватить?

2. Есть таблица, хочу для неё переопределить QHeaderView, так чтобы 3-я колонка занимала всё свободное пространство, а остальные сжимались до минимума. Делаю так

Код:
transactionsModelHeader::transactionsModelHeader(Qt::Orientation orientation, QWidget *parent) :
        QHeaderView(orientation, parent)
{
    setResizeMode(QHeaderView::ResizeToContents);
    setResizeMode(logicalIndexAt(2), QHeaderView::Stretch);
}

Сжимаются все.
« Последнее редактирование: Апрель 12, 2009, 19:18 от Ximik » Записан
kirill
Гость
« Ответ #1 : Апрель 13, 2009, 06:20 »

Галочка не через делегат рисуется а через саму модель.
На форуме было уже.
Код:
QVariant TreeModel::data(const QModelIndex &index, int role) const
{
...
    if (role == Qt::CheckStateRole)
    {
      TreeItem *item = static_cast<TreeItem *>(index.internalPointer()); 
      return item->isChecked();
    }
...

Код:
bool TreeModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
   Q_UNUSED(value);
   if (index.isValid() && role == Qt::CheckStateRole)
   {
      TreeItem *item = static_cast<TreeItem *>(index.internalPointer());   
     
      Qt::CheckState state = item->isChecked();
      if (state == Qt::Checked)
      {
...
      }
   }
}

Код:
class TreeItem
{
...
Qt::CheckState checkState;
...
}
Записан
Ximik
Гость
« Ответ #2 : Апрель 16, 2009, 19:11 »

Спасибо за наводку. Только ещё оказалось, нужно добавить

Код:
Qt::ItemFlags ListModel::flags(const QModelIndex& index) const {
   return QAbstractItemModel::flags(index) | Qt::ItemIsUserCheckable;
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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