Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Ximik от Апрель 12, 2009, 19:04



Название: Ещё пара вопросов по моделям
Отправлено: 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);
}

Сжимаются все.


Название: Re: Ещё пара вопросов по моделям
Отправлено: kirill от Апрель 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;
...
}


Название: Re: Ещё пара вопросов по моделям
Отправлено: Ximik от Апрель 16, 2009, 19:11
Спасибо за наводку. Только ещё оказалось, нужно добавить

Код:
Qt::ItemFlags ListModel::flags(const QModelIndex& index) const {
   return QAbstractItemModel::flags(index) | Qt::ItemIsUserCheckable;
}