Russian Qt Forum

Qt => Вопросы новичков => Тема начата: ruzik от Март 26, 2012, 08:44



Название: Как лучше сделать
Отправлено: ruzik от Март 26, 2012, 08:44
Здравствуйте, нужно переопределить функцию клонирования в наследнике QStandardItem с учетом нового члена класса
Вот что получилось у меня:
Код:
#ifndef RDATAITEM_H
#define RDATAITEM_H
//--------Qt
#include "QStandardItem"
//-------My and other headers
#include "Classes/RDataItemModel/RDataItemModel.h"
//-------
class RDataItemModel;

class RDataItem : public QStandardItem
{
public:
//***********/
    void setItemType(const RDataItemModel::itemType tp) { type = tp; }
    RDataItemModel::itemType getItemType() const { return type; }

     QStandardItem *clone() const;
     void setValue(const RDataItem * item) { *this = *item; }
private:
    RDataItemModel::itemType type;
};

#endif
Код:
//-------My and other headers
#include "RDataItem.h"
//-------

QStandardItem *RDataItem::clone() const
{
    RDataItem *item = new RDataItem(text());
    item->setValue(this);
    item->setItemType(getItemType());

    return item;
}
Нельзя ли как-то более понятно и красиво реализовать это дело, а то согласитесь, использовать для этого отдельную функцию, которую пришлось сделать публичной не есть правильно
Заранее спасибо!


Название: Re: Как лучше сделать
Отправлено: kambala от Март 26, 2012, 12:47
если конструктор копирования и оператор = находятся в private в QStandardItem (а это скорее всего так), тогда по-другому никак.

item->setItemType(getItemType()); - непонятно зачем ты это делаешь, если предыдущая строка и так копирует всё содержимое объекта.


Название: Re: Как лучше сделать
Отправлено: ruzik от Март 26, 2012, 20:05
Может я и не прав, но оператор присваивания определен в QStandardItem, причем он protected, то есть когда я приравниваю, я приравниваю эти объекты как QStandardItem без учета новой переменной