Чтобы не плодить неинтересные темы напишу в этой.
Как преобразовать перечисляемый тип
typedef enum ..... {
......,
......,
......,
} .......;
в QString ???
Qt =(,
почему никак? сам пиши функцию а вообще на форуме уже есть тема на этот счет.
я пользую так называемый X solution.
http://www.forum.crossplatform.ru/index.php?showtopic=1963
ЗЫ.
может новый стандарт нам что нить интересное подкинет.
Предлагаю не ждать стандартов, а воспользоваться мета-объектными средствами Qt.
#include <QtCore/QtGlobal>
#include <QtCore/QtDebug>
#include <QtCore/QMetaObject>
#include <QtCore/QMetaEnum>
class Programmer : public QObject
{
Q_OBJECT
public:
enum Language {ASM, C, CPP, PASCAL, FORTRAN, BASIC, JAVA};
Q_ENUMS(Language)
};
int main(int argc, char *argv[])
{
const QMetaObject &mo = Programmer::staticMetaObject;
int index = mo.indexOfEnumerator("Language");
QMetaEnum me = mo.enumerator(index);
Programmer::Language p = Programmer::CPP;
Programmer::Language l= static_cast<Programmer::Language>(me.keyToValue("CPP"));
qDebug() << me.valueToKey(p) << ":" << l;
return 0;
}
#include "main.moc"
CPP : 2
SABROG,
спасибо я к примеру этого не знал.
однако,по моему, все все равно сводится к созданию массива(мли мэпа) и функции доступа к строкам(если пользоваться этим напрямую то можно использовать не только в программах на Qt).
если честно, громоздко выглядит. чтобы получить строку необходимо объект создать все же это вызов конструктора.
и вот эта строка еще.
int index = mo.indexOfEnumerator("Language");
доступ к индексу по строке.
Согласен. Но код по сути - сырец. Можно его причесать так, чтобы было все чин-чинарем, с перегрузкой операторов и прочее.
Кроме того у этого кода есть преимущества над препроцессорными средствами. И к тому же он избавляет человека от двойного объявления членов списка. Раньше я обычно это решал таким образом:
//псевдокод
enum states {state1, state2};
const char *astates[] = {"state1", "state2"};
printf(astates[state1]);
2 SABROG
а если enum Language {ASM, C, CPP, PASCAL, FORTRAN, BASIC, JAVA} описан не в классе? то как тогда?
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)