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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Как в QTreeView запретить редактирование.  (Прочитано 7539 раз)
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« : Июнь 16, 2008, 15:43 »

Есть таблица сделанная из QTreeView. Нужно редактировать только 3-ю калонку. Написал свой делегат для 3-ей калонки. А как запретить редактирование в остальных?
если так
Код:
myTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers);

То тогда вся таблица не редактируеться. А как оставить 3-ю калонку ридактируемой, а остальные нет?
« Последнее редактирование: Июнь 17, 2008, 15:13 от Константин » Записан
-QT-
Гость
« Ответ #1 : Июнь 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;
} */
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #2 : Июнь 17, 2008, 08:30 »

-=QT=-
На сколько я понял твоё решение позволит запретить изменять данные в определённых колонках. Т.е. будет вызван делегат для каждой колонки, будет изменено значение в ячейки, а потом, при покидании ячейки значение из делигата будет перемещено в модель. И если редактировалась колонка 0 или 2, то значение в этих колонках измениться. А для др. колонок - не измениться.

Но мне бы хотелось, чтоб делигат вызывался только для 3-ей колонки, чтоб для др. колонок делигат даже не вызывался. Как запретить вызов делигата для определенных колонок?
Записан
Zmeishe
Гость
« Ответ #3 : Июнь 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;
}
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #4 : Июнь 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;
}

Ага, спасибо. Нашел в инете подобное решение. Проблема решена.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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