Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: INZER от Июня 06, 2012, 01:01



Название: [ЗАКРЫТО] Редактирование только одного столбца в QTableView
Отправлено: 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, однако редактированиевсе равно возможно.
Результат:
(http://s48.radikal.ru/i119/1206/b9/95de9658f504.jpg)

Необходимо, чтобы первый столбец был редактируемум, а последующие нет. Как это сделать?
Заранее спасибо!


Название: Re: Редактирование только одного столбца в QTableView
Отправлено: Странник от Июня 06, 2012, 01:36
обычно реализую это в модели, переопределяя
Цитировать
Qt::ItemFlags QAbstractItemModel::flags ( const QModelIndex & index ) const [virtual]


Название: Re: Редактирование только одного столбца в QTableView
Отправлено: Kurles от Июня 06, 2012, 08:34
обычно реализую это в модели, переопределяя
Цитировать
Qt::ItemFlags QAbstractItemModel::flags ( const QModelIndex & index ) const [virtual]
Или если используется QStandardItemModel то у QStandardItem есть метод setEditable (bool editable).


Название: Re: Редактирование только одного столбца в QTableView
Отправлено: INZER от Июня 12, 2012, 23:42
обычно реализую это в модели, переопределяя
Цитировать
Qt::ItemFlags QAbstractItemModel::flags ( const QModelIndex & index ) const [virtual]

можешь пример показать?


Название: Re: Редактирование только одного столбца в QTableView
Отправлено: Странник от Июня 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.


Название: Re: Редактирование только одного столбца в QTableView
Отправлено: INZER от Июня 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;
        }

тоже работает :)