Russian Qt Forum
Июня 09, 2025, 23:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [ЗАКРЫТО] Редактирование только одного столбца в QTableView  (Прочитано 5997 раз)
INZER
Гость
« : Июня 06, 2012, 01:01 »

Задача следующая: в QTableView необходимо разрешить редактирование только одного столбца.

Создал делегат, но не могу понять как отменить редактирование в ненужных столюцах
Код:
        
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
            if (index.column() == 0)
            {
                QDateEdit * dt = new QDateEdit(parent);
                return dt;
            }
}

Пробовал в условии в блоке else создавать QLabel, однако редактированиевсе равно возможно.
Результат:


Необходимо, чтобы первый столбец был редактируемум, а последующие нет. Как это сделать?
Заранее спасибо!
« Последнее редактирование: Июня 13, 2012, 14:19 от INZER » Записан
Странник
Гость
« Ответ #1 : Июня 06, 2012, 01:36 »

обычно реализую это в модели, переопределяя
Цитировать
Qt::ItemFlags QAbstractItemModel::flags ( const QModelIndex & index ) const [virtual]
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #2 : Июня 06, 2012, 08:34 »

обычно реализую это в модели, переопределяя
Цитировать
Qt::ItemFlags QAbstractItemModel::flags ( const QModelIndex & index ) const [virtual]
Или если используется QStandardItemModel то у QStandardItem есть метод setEditable (bool editable).
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
INZER
Гость
« Ответ #3 : Июня 12, 2012, 23:42 »

обычно реализую это в модели, переопределяя
Цитировать
Qt::ItemFlags QAbstractItemModel::flags ( const QModelIndex & index ) const [virtual]

можешь пример показать?
Записан
Странник
Гость
« Ответ #4 : Июня 13, 2012, 00:01 »

можешь пример показать?
за возможность редактирования отвечает флаг Qt::ItemIsEditable. для ячеек 0-го столбца возвращаете его, для других - нет.
Код:
Qt::ItemFlags YourModel::flags ( const QModelIndex & index ) const
{
   if (index.column() == 0) return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
   else return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
корректнее будет запрашивать флаги ParentModel::flags(index) и сбрасывать или добавлять Qt::ItemIsEditable.
Записан
INZER
Гость
« Ответ #5 : Июня 13, 2012, 14:14 »

Странник, спасибо!
все ОК!

после того как приделал твое решение нашло озарение и решил попробовать вот так:

Код:
        QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
        {
            if (index.column() == 0)
            {
                QLineEdit * dt = new QLineEdit(parent);
                return dt;
            }
            return NULL;
        }

тоже работает Улыбающийся
« Последнее редактирование: Июня 13, 2012, 14:41 от INZER » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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