ich habe hier im forum schon gelesen, dass man ein QVariant (richtige daten vom typ d. eigenen enums wurden uebergeben) per toInt() zu einer solchen (passenden) enum-variable konvertieren kann.
laut doku sollte aber dieses kleine programm funktionieren:
main.cpp:
Code: Alles auswählen
#include "myClass.h"
#include <QApplication>
int main( int argc, char **argv )
{
QApplication app( argc, argv );
myClass cl1;
cl1.set( myClass::OPT_ONE, 1337 );
cl1.set( myClass::OPT_TWO, 42.1337 );
cl1.set( myClass::OPT_ENUM, QVariant::fromValue( myClass::ENUM_VALUE_TWO ) );
return 0;
}Code: Alles auswählen
#include <QObject>
#include <QVariant>
#include <QMap>
#include <QDebug>
class myClass : public QObject
{
Q_OBJECT
Q_ENUMS( myClass::myOption )
Q_ENUMS( myClass::myEnum )
public:
enum myOption{ OPT_ONE, OPT_TWO, OPT_ENUM };
enum myEnum{ ENUM_VALUE_ONE = 0, ENUM_VALUE_TWO = 1 };
myClass( QObject *parent = 0 );
public slots:
QVariant get( const myOption p_opt ) const;
void set( const myOption p_opt, const QVariant &p_val );
private:
QMap< myOption, QVariant > map;
};
Q_DECLARE_METATYPE( myClass::myOption )
Q_DECLARE_METATYPE( myClass::myEnum )Code: Alles auswählen
#include "myClass.h"
myClass::myClass(QObject *parent)
:QObject( parent )
{
map.insert( OPT_ONE, QVariant( 42 ) );
map.insert( OPT_TWO, QVariant( 13.37 ) );
map.insert( OPT_ENUM, QVariant::fromValue( myClass::ENUM_VALUE_ONE ) );
}
QVariant myClass::get( const myOption p_opt ) const
{
return map[ p_opt ];
}
void myClass::set( const myOption p_opt, const QVariant &p_val )
{
switch( p_opt )
{
case OPT_ONE:
if( p_val.canConvert< int >() )
map[ OPT_ONE ] = p_val;
else
qDebug() << "can't be converted to int!";
break;
case OPT_TWO:
if( p_val.canConvert< double >() )
map[ OPT_TWO ] = p_val;
else
qDebug() << "can't be converted to double!";
case OPT_ENUM:
if( p_val.canConvert< myClass::myEnum >() )
map[ OPT_ENUM ] = p_val;
else
qDebug() << "can't be converted to myClass::myEnum!";
}
}Code: Alles auswählen
can't be converted to myClass::myEnum!mfg,
julian