Здравствуйте, нужно переопределить функцию клонирования в наследнике 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;
}
такая стратегия имеет место быть, и дело тут не в "некрасивости". При разных объектных моделях используют разные подходы. Можно переопределить конструктор копирования или создать фабрику клонирования, это уже зависит от конкретной задачи. Но, обычно, клонирующая функция является виртуальной. Можно посмотреть http://progbook.ru/2008/08/03/sovremennoe-proektirovanie-na-c-andrejj.html различные подходы к решению твоей проблемы более детально.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)