>ну хоть кто-то отозвался:) спасибо
>вообще рабочая версия такая и есть...
>но хотелось бы легкости в сопровождении
>при появлении новых виджетов
>приходится дополнять все функции (getData(), setData(), clear(), isMoified() и т.д.) дополнительными проверками
>
>было бы замечательно если такая проверка осуществлялась только при создании editora... или вот так
#include <QApplication>
#include <QString>
#include <QVariant>
#include <QWidget>
#include <QLineEdit>
#include <QDateEdit>
#include <QHBoxLayout>
class Implementor
{
public:
Implementor(){};
virtual ~Implementor(){};
virtual void setData(QVariant){};
};
class LineEdit : public Implementor, public QLineEdit
{
public:
LineEdit(QWidget *parent = 0): QLineEdit(parent){};
void setData(const QVariant data){setText(data.toString());};
};
class DateEdit : public Implementor, public QDateEdit
{
public:
DateEdit(QWidget *parent = 0): QDateEdit(parent){};
void setData(const QVariant data){setDate(data.toDate());};
};
class EditWidget: public QWidget
{
protected:
Implementor *implementor;
public:
EditWidget(QString type):QWidget(){
if(type == "lineedit")
implementor = new LineEdit(this);
else if(type == "dateedit")
implementor = new DateEdit(this);
};
~EditWidget(){if(implementor) delete implementor;};
virtual void setData(QVariant data)
{
implementor->setData(data);
};
};
class Frame: public QFrame{
QVBoxLayout layout;
EditWidget *ledit, *dedit;
public:
Frame(){
ledit = new EditWidget("lineedit");
ledit->setData("Hello from Africa");
layout.addWidget((QWidget*)ledit);
dedit = new EditWidget("dateedit");
dedit->setData("2008-05-01");
layout.addWidget((QWidget*)dedit);
setLayout(&layout);
setFrameShape(QFrame::Box);
setFrameShadow(QFrame::Plain);
}
~Frame(){if(ledit) delete ledit; if(dedit) delete dedit;}
};
int main(int argc, char** argv)
{
QApplication app(argc, argv);
Frame f;
f.show();
return app.exec();
}