Перечисление (enum) в Qt 5.12.3 и их правильное объявление и организация работы с ними
Всем доброго времени суток!
Так как я начинающий программист на Qt и многие вещи для меня в диковинку и не совсем понятны, то хотел бы спросить, как правильно вданной IDE организовывать enum и потом ими пользоваться во всем коде программы? Почитал много материалов и все они сводятся к примерам с Q_OBJECT, QVariant и т.д. Но как правильно организовать работу я не совсем понимаю.
Буду рад, если Гуру программирования на Qt откликнутся и подскажут направление движения и еще был бы признателен, если еще и примерчики покажут, как это делается.
Всем спасибо за отклик!
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
- Akiv Doros
- 11 листопада 2024 р. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
- molni99
- 26 жовтня 2024 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Добрый день!
А что конкретно требует разъяснения? Обычные C++ enum? Или с использованием макросов Qt типо Q_ENUM или Q_ENUMS?
В большинстве случаев достаточно обычного подхода к работе с enum, а заворачивание их в эти макросы Qt нужны скорее для дополнения мета информации при сборке проекта и работе с этими enum в QML.
Оба варианта имеют свою практическую ценность, обоими вариантами пользуюсь постоянно. Какие-то конкрентые приёмы уже скорее от ситуации рассматривать нужно.
Евгений, добрый день.
Так как я в самом начале пути познания Qt, то для меня разъяснять нужно практически все. Ну это лирика. Моя забумка состоит в следующем. У меня в классе есть поля, которые требуют перечислений. Почитав и посомтрев примеры яя решил, что я сделаю перечисление в виде класса и в дальнейшем смогу его использовать в любом месте своей программы. Нет ли здесь каких подводных камней? Еще дело в том, что мой код в дальнейшем превратится в динамическую библиотеку и ее будут использовать другие разработчики. Не возмикнет ли в этом случае каких либо проблем с использованием бибилиотеки? Еще я прочитал, что использовать перечисления без пространства имен - это плохой пример написания кода. Я определил namespace и завел туда класс, но пока без перечислений (enum). Нужно ли использовать namespace?
И еще такой момент нужно ли содавать класс в Qt h/cpp или достаточно создать header?
Использование enum в вашем случае отношения к Qt никакого не имеет. Qt - это библиотека, а enum - это часть языка программирования. Так что вы сейчас задаёте вопросы по языку программирования.
Насчёт namespace пишут правильно. Конфликты с пространствами имён вещь в принципе неприятная. Поэтому, если пишите свою библиотеку, то желательно и определить собственное пространство имён, чтобы случайно не назвать класс одинаково с какой-нибудь известной библиотекой.
Что касается enum внутри класса, то вовсе не обязательно делать их внутри класса. У Qt например очень многие перечисления находятся просто в пространстве имён.
То есть вы можете взять namespace и написать внутри него перечисление:
Вопрос код-стайла зависит от конкретного код-стайла в компании, в которой вы работает. Лично я пользуюсь таким код-стайлом, да и у нас в компании он именно такой.
Также существует два типа объявления enum
Об их различиях подробнее написано в одной из статей, которые я вам привёл в первом сообщении.
Если там будут только перечисления внутри namespace, то жа, достаточно будет заголовочного файла
Евгений, добрый день.
Можно к Вам обратиться с очередным вопросом. Как вернуть NULL или что-то подобное из фнукции, которая возвращает мой собственный тип объекта? Я пробовал NULL, 0, nullptr. Всегда выдает ошибку error: no viable conversion from returned value of type 'nullptr_t' to function return type 'ns_harness::Harness'. Как такую ситуацию разрулить?
Заранее благодарен за помощь.
Добрый день!
Этот вопрос не имеет отношения к перечислениям. Лучше было бы, чтобы вы задавали новый вопрос на форуме.
Касательно самого вопроса, то функцию нужно посмотреть, что вы пытались делать и как это выглядело. А то может вы объект созданный на стеке возвращаете. Тогда конечно nullptr не получится вернуть, поскольку его возвращают тогда, когда функция должна возвращать указатель на объект, а не объект на стеке или ссылку на него.
Евгений, сейчас создам новую тему. А с перечислениями у меня все получилось, спасибо!