Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: juvf от Июнь 16, 2008, 15:43



Название: [РЕШЕНО] Как в QTreeView запретить редактирование.
Отправлено: juvf от Июнь 16, 2008, 15:43
Есть таблица сделанная из QTreeView. Нужно редактировать только 3-ю калонку. Написал свой делегат для 3-ей калонки. А как запретить редактирование в остальных?
если так
Код:
myTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers);

То тогда вся таблица не редактируеться. А как оставить 3-ю калонку ридактируемой, а остальные нет?


Название: Re: Как в QTreeView запретить редактирование.
Отправлено: -QT- от Июнь 16, 2008, 15:51
Код:
// Это для редактирования записей
/* bool QMyJobTreeModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
    if (index.isValid() && role == Qt::EditRole)
    {
        QMyJobNode *node = nodeFromIndex(index);
        if (node)
        {
            switch ( index.column() )
            {
            case 0 :
                node->jobName = value.value<QString>();  // используется приведение типов
            case 2 :
                node->planDayNumber = value.value<int>(); // используется приведение типов
            default:
                return false;
            }
            emit dataChanged(index, index);
            return true;
        }
    }
    return false;
} */


Название: Re: Как в QTreeView запретить редактирование.
Отправлено: juvf от Июнь 17, 2008, 08:30
-=QT=-
На сколько я понял твоё решение позволит запретить изменять данные в определённых колонках. Т.е. будет вызван делегат для каждой колонки, будет изменено значение в ячейки, а потом, при покидании ячейки значение из делигата будет перемещено в модель. И если редактировалась колонка 0 или 2, то значение в этих колонках измениться. А для др. колонок - не измениться.

Но мне бы хотелось, чтоб делигат вызывался только для 3-ей колонки, чтоб для др. колонок делигат даже не вызывался. Как запретить вызов делигата для определенных колонок?


Название: Re: Как в QTreeView запретить редактирование.
Отправлено: Zmeishe от Июнь 17, 2008, 09:00
Цитировать
Но мне бы хотелось, чтоб делигат вызывался только для 3-ей колонки, чтоб для др. колонок делигат даже не вызывался.
Qt::ItemFlags QMyJobTreeModel::flags ( const QModelIndex & index) const
{
       if(index.column() == 2)
       return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
       
       return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}


Название: Re: Как в QTreeView запретить редактирование.
Отправлено: juvf от Июнь 17, 2008, 10:03
Цитировать
Код:
Qt::ItemFlags QMyJobTreeModel::flags ( const QModelIndex & index) const
{
       if(index.column() == 2)
       return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
       
       return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}

Ага, спасибо. Нашел в инете подобное решение. Проблема решена.