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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите разобратся с редактированием в TableView  (Прочитано 2534 раз)
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);

Не работает. Прочитал бланшета посмотрел примеры но никак реализовать это не могу
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 04, 2011, 15:26 »

QSqlQueryModel не редактируется. Используй QSqlTableModel.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
sergun1604
Гость
« Ответ #2 : Апрель 04, 2011, 16:16 »

Понял попробую отпишусь
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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