Russian Qt Forum

Qt => Model-View (MV) => Тема начата: sergun1604 от Апрель 04, 2011, 15:23



Название: Помогите разобратся с редактированием в TableView
Отправлено: sergun1604 от Апрель 04, 2011, 15:23
Простой вопрос вроде но никак не могу разорбратся с делегатом.
Есть tableview, QSqlQueryModel
Необходимо сделать так чтобы человек мог редактировать ячейку в вьювке
добавил в проект класс делегата
в заголовочном
Код:
#ifndef LINEEDITDELEGATE_H
#define LINEEDITDELEGATE_H

#include <QObject>
#include <QItemDelegate>

class LineEditDelegate : public QItemDelegate
{
Q_OBJECT
public:
    LineEditDelegate(QObject *parent = 0);

         QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                               const QModelIndex &index) const;

         void setEditorData(QWidget *editor, const QModelIndex &index) const;
         void setModelData(QWidget *editor, QAbstractItemModel *model,
                           const QModelIndex &index) const;

};

#endif // LINEEDITDELEGATE_H

в исходнике делегата
Код:
#include "lineeditdelegate.h"
#include <QItemDelegate>
#include <QLineEdit>


LineEditDelegate::LineEditDelegate(QObject *parent)
    :QItemDelegate(parent)
{
}

QWidget *LineEditDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QLineEdit *editor = new QLineEdit(parent);
    return editor;
}

void LineEditDelegate::setEditorData(QWidget *editor,
                                     const QModelIndex &index) const
 {
    QString value = index.model()->data(index, Qt::EditRole).toString();
    QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
    lineEdit->setText(value);
 }

void LineEditDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                    const QModelIndex &index) const
 {
    QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
    QString value = lineEdit->text();
    model->setData(index, value, Qt::EditRole);
 }

в исходниках где лежит вьювка добавил код в событие по клику

Код:
LineEditDelegate *delPerson = new LineEditDelegate (ui->tableView_3);
    ui->tableView_3->setItemDelegate(delPerson);

Не работает. Прочитал бланшета посмотрел примеры но никак реализовать это не могу


Название: Re: Помогите разобратся с редактированием в TableView
Отправлено: Пантер от Апрель 04, 2011, 15:26
QSqlQueryModel не редактируется. Используй QSqlTableModel.


Название: Re: Помогите разобратся с редактированием в TableView
Отправлено: sergun1604 от Апрель 04, 2011, 16:16
Понял попробую отпишусь