Автор: 0xF
Тема обсуждения: Property browser
Пример того, как можно сделать полноценный Property browser для своих нужд:
// ** Пример использования
class cSomeClass {
private:
float fProperty;
int iProperty;
float vProperty[2]; // двухмерный вектор
byte cProperty[4]; // цвет
std::string sProperty;
bool bProperty;
...
public:
...
// ** Основной порок - кривоватая система для описания свойств объекта, не было времени сделать что-нить более толковое :)
QPropertyGrid::sPropertyDef* CreatePropertyDef( void ) {
QPropertyGrid::sPropertyDef *def = new QPropertyGrid::sPropertyDef[ 7 ];
def[0].name = "Float property";
def[0].type = QPropertyGrid::T_FLOAT;
def[0].pointer = &fProperty;
def[0].minf = -10.0f;
def[0].maxf = 10.0f;
def[1].name = "Int property";
def[1].type = QPropertyGrid::T_INT;
def[1].pointer = &iProperty;
def[2].name = "2D Vector";
def[2].type = QPropertyGrid::T_VECTOR2;
def[2].pointer = vProperty;
memcpy( def[2].captions.xCaption, "min", 4 ); // ** Это вообще жуть :)
memcpy( def[2].captions.yCaption, "max", 4 );
def[3].name = "Color property";
def[3].type = QPropertyGrid::T_COLOR;
def[3].pointer = cProperty;
def[4].name = "String property";
def[4].type = QPropertyGrid::T_STRING;
def[4].pointer = &sProperty;
def[5].name = "Bool property";
def[5].type = QPropertyGrid::T_BOOL;
def[5].pointer = &bProperty;
def[6].type = QPropertyGrid::T_TOTAL; // Конец описания
}
...
};
// ** Собственно связывание QPropertyGrid с объектом
QPropertyGrid:::sPropertyDef *def = someClassObject->CreatePropertyDef();
propertyGrid->SetObject( def );
delete[]def;
Скачать...