Russian Qt Forum

Qt => Вопросы новичков => Тема начата: vanix от Февраль 17, 2011, 05:17



Название: Обход перечисления
Отправлено: vanix от Февраль 17, 2011, 05:17
Подскажите пожалуйста как обойти перечисление и получить список наименований всех элементов, ну к примеру перечисления Qt::GlobalColor, пробывал следующим образом:
Код:
    QStringList lst;
    foreach(QColor color, Qt::GlobalColor){
        lst << color.name();
    }
не работает.


Название: Re: Обход перечисления
Отправлено: _govorilka от Февраль 17, 2011, 08:01
Для твоего конкретного(!!!) примера можно написать что-то подобное:
Код:
for(int color = Qt::color0; color <= Qt::transparent; ++color)
{
   ....
}

Воообще перечисления в C++ - это просто набор целых констант (переменных), а перебирать "списки" переменных в C++ нельзя. Почитай тут: http://lib.ru/CPPHB/cpptut.txt (http://lib.ru/CPPHB/cpptut.txt), глава 2.5.1 про перечисления.


Название: Re: Обход перечисления
Отправлено: _govorilka от Февраль 17, 2011, 08:08
Я сделал список всех SVG цветов в своём проекте через map: http://code.google.com/p/fireworks/source/browse/src/fwcore/fwcolor.cpp (http://code.google.com/p/fireworks/source/browse/src/fwcore/fwcolor.cpp). Посмотри, возможно тебе пригодиться...


Название: Re: Обход перечисления
Отправлено: crackedmind от Февраль 17, 2011, 10:25
Есть вариант обойти все перечисления, если они объявлены так:

Код
C++ (Qt)
lass MyClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(Priority priority READ priority WRITE setPriority)
    Q_ENUMS(Priority)
 
public:
    MyClass(QObject *parent = 0);
    ~MyClass();
 
    enum Priority { High, Low, VeryHigh, VeryLow };
 
    void setPriority(Priority priority);
    Priority priority() const;
};
 

Обходишь примерно вот так:
Код
C++ (Qt)
QObject *object = ...
const QMetaObject *metaobject = object->metaObject();
int count = metaobject->enumeratorCount ();
for (int i=0; i<count; ++i) {
    QMetaEnum metaenum = metaobject->enumerator(i);
    const char *name = metaenum.name();
    ...
}
 

Но enum должен быть объявлен внутри класса наследованного от QObject'a