Russian Qt Forum
Ноябрь 23, 2024, 03:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обход перечисления  (Прочитано 5793 раз)
vanix
Гость
« : Февраль 17, 2011, 05:17 »

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

Для твоего конкретного(!!!) примера можно написать что-то подобное:
Код:
for(int color = Qt::color0; color <= Qt::transparent; ++color)
{
   ....
}

Воообще перечисления в C++ - это просто набор целых констант (переменных), а перебирать "списки" переменных в C++ нельзя. Почитай тут: http://lib.ru/CPPHB/cpptut.txt, глава 2.5.1 про перечисления.
Записан
_govorilka
Гость
« Ответ #2 : Февраль 17, 2011, 08:08 »

Я сделал список всех SVG цветов в своём проекте через map: http://code.google.com/p/fireworks/source/browse/src/fwcore/fwcolor.cpp. Посмотри, возможно тебе пригодиться...
Записан
crackedmind
Гость
« Ответ #3 : Февраль 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
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.092 секунд. Запросов: 21.