crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Помогите с делегатом, Подправьте пожалуйста делегат, а то я совсем запутался(
Гость_Hepr_*
сообщение 20.2.2011, 15:21
Сообщение #1





Гости








    


Здравствуйте, у меня есть делегат- QTimeEdit, я делегирую его в QTableWidget, фактически за основу я взял делегат QSpinBox'a из примеров Qt, и изменил то что мне надо, но выскакивают ошибки, я меняю код, и ошибки меняются :o:
Вот сам код
delegate.h
#ifndef DELEGATE_H
#define DELEGATE_H

#include <QItemDelegate>
#include <QModelIndex>
#include <QObject>
#include <QSize>
#include <QSpinBox>

//! [0]
class TimeEditDelegate : public QItemDelegate
{
    Q_OBJECT

public:
    TimeEditDelegate(QObject *parent = 0);
    QTime * value;

    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;

    void updateEditorGeometry(QWidget *editor,
        const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
//! [0]

#endif

delegate.cpp
#include <QtGui>
#include "delegate.h"


//! [0]
TimeEditDelegate::TimeEditDelegate(QObject *parent)
    : QItemDelegate(parent)
{
}
//! [0]

//! [1]
QWidget *TimeEditDelegate::createEditor(QWidget *parent,
    const QStyleOptionViewItem &/* option */,
    const QModelIndex &/* index */) const
{
    QTimeEdit *editor = new QTimeEdit(parent);
    return editor;
}
//! [1]

//! [2]
void TimeEditDelegate::setEditorData(QWidget *editor,
                                    const QModelIndex &index) const
{
    * value = index.model()->data(index, Qt::EditRole).toTime();
    QTimeEdit *timeEdit = static_cast<QTimeEdit*>(editor);
    timeEdit->setTime(* value);
}
//! [2]

//! [3]
void TimeEditDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                   const QModelIndex &index) const
{
    QTimeEdit *timeEdit = static_cast<QTimeEdit*>(editor);
    timeEdit->interpretText();
    * value = timeEdit->time();
    model->setData(index, value , Qt::EditRole);
}
//! [3]

//! [4]
void TimeEditDelegate::updateEditorGeometry(QWidget *editor,
    const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
    editor->setGeometry(option.rect);
}
//! [4]

Скажите пожалуйста, что я делаю неправильно, и объясните как правильно, если не трудно
Вот, какая ошибка выскакивает сейчас

Ошибка 1 error C2248: QVariant::QVariant: невозможно обратиться к private член, объявленному в классе "QVariant" c:\Documents and Settings\hepr\Мои документы\Visual Studio 2008\Projects\asd\asd\delegets\delegate.cpp 87
Заранее спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 21.2.2011, 11:13
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Гость_hepr_* @ 21.2.2011, 1:17) *
Qt::EditRole); // и показало что ошибка в этой строке
он просто показал на конец оператора. Си/Си++ компилятор не в силах определить место в строке, только саму строку.

можешь для эксперимента закрывающуюся скобку перенести на другую строку
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Hepr_*
сообщение 21.2.2011, 16:14
Сообщение #3





Гости








    


Здравствуйте, теперь все компилируется нормально, проект запускается, но как только я хочу вызвать делегат выдает ошибку(Нарушение прав доступа при чтении), я понимаю чем это может быть вызвано(обращение не к публичной функции вне класса и тп), но где именно в коде может провоцироваться ошибка, я так и не нашел, помогите пожалуйста
delegate.h
#ifndef DELEGATE_H
#define DELEGATE_H

#include <QItemDelegate>
#include <QModelIndex>
#include <QObject>
#include <QSize>
#include <QSpinBox>

//! [0]
class TimeEditDelegate : public QItemDelegate
{
    Q_OBJECT

public:
    TimeEditDelegate(QObject *parent = 0);
    QTime * val;

    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;

    void updateEditorGeometry(QWidget *editor,
        const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
//! [0]

#endif

delegate.cpp
#include <QtGui>
#include "delegate.h"


//! [0]
TimeEditDelegate::TimeEditDelegate(QObject *parent)
: QItemDelegate(parent)
{
}
//! [0]

//! [1]
QWidget *TimeEditDelegate::createEditor(QWidget *parent,
                                        const QStyleOptionViewItem &/* option */,
                                        const QModelIndex &/* index */) const
{
    QTimeEdit *editor = new QTimeEdit(parent);
    return editor;
}
//! [1]

//! [2]
void TimeEditDelegate::setEditorData(QWidget *editor,
                                     const QModelIndex &index) const
{
    * val = index.model()->data(index, Qt::EditRole).toTime();
    QTimeEdit *timeEdit = static_cast<QTimeEdit*>(editor);
    timeEdit->setTime(* val);
}
//! [2]

//! [3]
void TimeEditDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                    const QModelIndex &index) const
{
    QTimeEdit *timeEdit = static_cast<QTimeEdit*>(editor);
    timeEdit->interpretText();
    * val = timeEdit->time();
    //   model->setData(index, value , Qt::EditRole);
}
//! [3]

//! [4]
void TimeEditDelegate::updateEditorGeometry(QWidget *editor,
                                            const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
    editor->setGeometry(option.rect);
}
//! [4]

main.cpp
#include <QApplication>
#include <QHeaderView>
#include <QItemSelectionModel>
#include <QStandardItemModel>
#include <QTableView>

#include "delegate.h"

//! [0]
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QStandardItemModel model(4, 2);
    QTableView tableView;
    tableView.setModel(&model);

    TimeEditDelegate delegate;
    tableView.setItemDelegate(&delegate);
//! [0]

    tableView.horizontalHeader()->setStretchLastSection(true);

//! [1]
    for (int row = 0; row < 4; ++row) {
        for (int column = 0; column < 2; ++column) {
            QModelIndex index = model.index(row, column, QModelIndex());
            model.setData(index, QVariant((row+1) * (column+1)));
        }
//! [1] //! [2]
    }
//! [2]

//! [3]
    tableView.setWindowTitle(QObject::tr("Spin Box Delegate"));
    tableView.show();
    return app.exec();
}
//! [3]

P.S. заранее огромное спасибо, за потраченное время
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Hepr   Помогите с делегатом   20.2.2011, 15:21
- - xls   Ты изменяешь член "value" в константных...   20.2.2011, 16:53
- - Hepr   А исправьте пожалуйста, как правильно   20.2.2011, 17:25
- - Litkevich Yuriy   Гость_Hepr_*, а он тебе как член класса и не нужен...   20.2.2011, 20:48
|- - Hepr   Цитата(Litkevich Yuriy @ 20.2.2011, 20:48...   20.2.2011, 22:23
- - Rocky   Цитата(Гость_Hepr_* @ 20.2.2011, 22:23) О...   20.2.2011, 22:27
|- - hepr   Цитата(Rocky @ 20.2.2011, 22:27) Цитата(Г...   20.2.2011, 23:17
|- - Hepr   ЦитатаПереименуй value. И вправду помогло, а не об...   20.2.2011, 23:28
- - xls   Переименуй value.   20.2.2011, 23:15
- - Litkevich Yuriy   Цитата(Гость_hepr_* @ 21.2.2011, 1:17) Qt...   21.2.2011, 11:13
|- - Hepr   Здравствуйте, теперь все компилируется нормально, ...   21.2.2011, 16:14
- - Rocky   рррррр.. В посте номер 1 такой код: void TimeEditD...   21.2.2011, 17:02
|- - Hepr   Цитата(Rocky @ 21.2.2011, 17:02) рррррр.....   21.2.2011, 17:56
- - Rocky   1. Вижу объявление указателя на класс QTime * val;...   21.2.2011, 18:06
|- - Hepr   Цитата(Rocky @ 21.2.2011, 18:06) 1. Вижу ...   21.2.2011, 18:36
|- - Hepr   Что бы не открывать новой темы, позвольте задать в...   21.2.2011, 22:35
- - Алексей1153   Цитата(Гость_Hepr_* @ 21.2.2011, 18:14) /...   3.3.2011, 9:04


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 11:36