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
Заранее спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Rocky
  опции профиля:
сообщение 21.2.2011, 17:02
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


рррррр..
В посте номер 1 такой код:
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);
}


В посте номер 11:
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);
}


Т.е. воспринято было буквально, value заменен на val. Я бы посоветовал пойти почитать для начала любую книгу "С++ для начинающих" и т.п. В частности что такое указатели, для чего они, как с ними работать и пр. и пр. Иначе код такой потом получится что мама не горюй.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Hepr_*
сообщение 21.2.2011, 17:56
Сообщение #3





Гости








    


Цитата(Rocky @ 21.2.2011, 17:02) *
рррррр..
В посте номер 1 такой код:
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);
}


В посте номер 11:
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);
}


Т.е. воспринято было буквально, value заменен на val. Я бы посоветовал пойти почитать для начала любую книгу "С++ для начинающих" и т.п. В частности что такое указатели, для чего они, как с ними работать и пр. и пр. Иначе код такой потом получится что мама не горюй.

Я как раз после такой книги, и ни смотря на то что я буквально понял подсказку-ошибки больше не выдавалось, и текст начал компилироваться нормально,
И я вроде неплохо варю С++(насколько это возможно для новичка), что такое указатели и как их использовать знаю, просто я Qt совсем не давно начал изучать вот и часто глупости пишу, и все-таки не могли бы подсказать где ошибка, а лучше тыкнуть носом, а то я совсем запутался :mellow:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- 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


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


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




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