QT 4: программирование GUI на С++
Шрифт:
Перечисления
С++ позволяет с помощью перечисления объявлять набор поименованных констант аналогично тому, как это делается в C#. Предположим, что в программе требуется хранить названия дней недели:
Обычно это объявление располагается в заголовочном файле или даже внутри класса. Приведенное выше объявление на первый взгляд представляется эквивалентным следующим определениям констант:
Применяя
Если нас мало волнует обеспечение защищенности типов, мы можем просто написать
Обратите внимание на то, что при ссылке на константу Sunday из перечисления DayOfWeek мы пишем просто Sunday, а не DayOfWeek::Sunday.
По умолчанию компилятор назначает последовательные целочисленные значения константам перечисления, начиная с нуля. При необходимости можно назначить другие значения:
Если значение не задается для элемента перечисления, этот элемент примет значение предыдущего элемента, увеличенное на 1. Перечисления иногда используются для объявления целочисленных констант, и в этих случаях перечислению обычно имя не задают:
Другой областью применения перечислений является представление набора опций. Рассмотрим пример диалогового окна Find (поиск) с четырьмя переключателями, которые управляют алгоритмом поиска (применение шаблона поиска, учет регистра, поиск в обратном направлении и повторение поиска с начала документа). Это можно представить в виде перечисления, значения констант которого равны некоторой степени 2:
Каждая опция часто называется «флажком». Флажки можно объединять
Проверить значение флажка можно при помощи логического поразрядного оператора &:
Переменная типа FindOption может содержать только один флажок в данный момент времени. Результат объединения нескольких флажков при помощи оператора | представляет собой обычное целое число. К сожалению, здесь не обеспечивается защищенность типа: компилятор не будет «жаловаться», если функция, которая должна принимать в качестве параметра типа int некую комбинацию опций FindOption, фактически получит Saturday. Qt использует класс QFlags<T> для обеспечения защищенности своих собственных типов флажков. Этот класс можно также применять при определении пользовательских типов флажков. Подробное описание класса QFlags<T> можно найти в онлайновой документации.
Имена, вводимые typedef
С++ позволяет с помощью ключевого слова typedef назначать псевдонимы типам данных. Например, если часто используется тип QVector<Point2D> и хотелось бы сэкономить немного на вводе символов (или, к несчастью, приходится иметь дело с норвежской клавиатурой и вам трудно найти на ней угловые скобки), то можно в одном из ваших заголовочных файлов использовать такое объявление typedef:
После этого можно использовать имя PointVector как сокращение для QVector<Point2D>. Следует отметить, что новое имя указывается после старого. Синтаксис typedef специально имитирует синтаксис объявлений переменных.
В Qt имена, вводимые typedef, в основном используются по трем причинам:
• Удобство: Qt объявляет с помощью typedef имена uint и QWidgetList для unsigned int и QList<QWidget *>, чтобы сэкономить несколько символов.
Душелов. Том 3
3. Внутренние демоны
Фантастика:
альтернативная история
аниме
фэнтези
ранобэ
хентай
рейтинг книги
Возвышение Меркурия. Книга 3
3. Меркурий
Фантастика:
попаданцы
аниме
рейтинг книги
Кодекс Крови. Книга VII
7. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
Архил...? 4
4. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
рейтинг книги
Чехов
1. Адвокат Чехов
Фантастика:
фэнтези
боевая фантастика
альтернативная история
рейтинг книги
Переписка 1826-1837
Документальная литература:
публицистика
рейтинг книги
