crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как преобразовать перечисляемый тип в QString ?
Qt =(
  опции профиля:
сообщение 7.3.2009, 23:45
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 20.1.2009
Пользователь №: 497

Спасибо сказали: 1 раз(а)




Репутация:   0  


Чтобы не плодить неинтересные темы напишу в этой.
Как преобразовать перечисляемый тип
typedef enum ..... {
......,
......,
......,
} .......;
в QString ???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 7.3.2009, 23:49
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(Qt =( @ 7.3.2009, 23:45) *
Чтобы не плодить неинтересные темы напишу в этой.
Как преобразовать перечисляемый тип
typedef enum ..... {
......,
......,
......,
} .......;
в QString ???

Ты хочешь получить имена из перечисления? Тогда никак.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Qt =(
  опции профиля:
сообщение 8.3.2009, 0:11
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 20.1.2009
Пользователь №: 497

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(BRE @ 7.3.2009, 23:49) *
Цитата(Qt =( @ 7.3.2009, 23:45) *
Чтобы не плодить неинтересные темы напишу в этой.
Как преобразовать перечисляемый тип
typedef enum ..... {
......,
......,
......,
} .......;
в QString ???

Ты хочешь получить имена из перечисления? Тогда никак.

да ладно...в делфях и то есть фукция GetEnumName.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 8.3.2009, 2:24
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Qt =(,
почему никак? сам пиши функцию а вообще на форуме уже есть тема на этот счет.
я пользую так называемый X solution.
короче

ЗЫ.
может новый стандарт нам что нить интересное подкинет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 8.3.2009, 11:46
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Предлагаю не ждать стандартов, а воспользоваться мета-объектными средствами 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


Не забудьте прописать CONFIG += console в .pro файле.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 8.3.2009, 12:05
Сообщение #6


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


SABROG,
спасибо я к примеру этого не знал.
однако,по моему, все все равно сводится к созданию массива(мли мэпа) и функции доступа к строкам(если пользоваться этим напрямую то можно использовать не только в программах на Qt).

если честно, громоздко выглядит. чтобы получить строку необходимо объект создать все же это вызов конструктора.
и вот эта строка еще.
int index = mo.indexOfEnumerator("Language");
доступ к индексу по строке.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 8.3.2009, 13:18
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Согласен. Но код по сути - сырец. Можно его причесать так, чтобы было все чин-чинарем, с перегрузкой операторов и прочее.
Кроме того у этого кода есть преимущества над препроцессорными средствами. И к тому же он избавляет человека от двойного объявления членов списка. Раньше я обычно это решал таким образом:

//псевдокод
enum states {state1, state2};
const char *astates[] = {"state1", "state2"};
printf(astates[state1]);


Сообщение отредактировал SABROG - 8.3.2009, 13:18
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Qt =(
  опции профиля:
сообщение 11.3.2009, 19:57
Сообщение #8


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 20.1.2009
Пользователь №: 497

Спасибо сказали: 1 раз(а)




Репутация:   0  


2 SABROG
а если enum Language {ASM, C, CPP, PASCAL, FORTRAN, BASIC, JAVA} описан не в классе? то как тогда?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 12.3.2009, 12:22
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Qt =( @ 11.3.2009, 19:57) *
2 SABROG
а если enum Language {ASM, C, CPP, PASCAL, FORTRAN, BASIC, JAVA} описан не в классе? то как тогда?

Поместить в класс. Рефакторинг.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Qt =(
  опции профиля:
сообщение 13.3.2009, 15:14
Сообщение #10


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 20.1.2009
Пользователь №: 497

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(SABROG @ 12.3.2009, 12:22) *
Цитата(Qt =( @ 11.3.2009, 19:57) *
2 SABROG
а если enum Language {ASM, C, CPP, PASCAL, FORTRAN, BASIC, JAVA} описан не в классе? то как тогда?

Поместить в класс. Рефакторинг.

Благодарю именно так и поступил =)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 10.4.2020, 9:00