Жасмин Бланшет - QT 4: программирование GUI на С++
- Название:QT 4: программирование GUI на С++
- Автор:
- Жанр:
- Издательство:КУДИЦ-ПРЕСС
- Год:2007
- Город:Москва
- ISBN:978-5-91136-038-2
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Жасмин Бланшет - QT 4: программирование GUI на С++ краткое содержание
Единственное официальное руководстро по практическому программированию в среде Qt 4.1.
Применяя средства разработки Qt компании «Trolltech», вы сможете создавать на С++ промышленные приложения, которые естественно работают в средах Windows, Linux/UNIX, Linux для встроенных систем без изменения программного кода и Mac Os X. Книга написана сотрудниками компании «Trolltech». Она представляет собой практическое руководство по успешному применению самой мощной из всех созданных до сих пор версий Qt — Qt 4.1.
Из книги «Qt 4: программирование GUI на С++» вы узнаете о наиболее эффективных приемах и методах программирования с применением Qt 4 и овладеете ключевыми технологиями в самых различных областях — от архитектуры Qt модель/представление до мощного графического процессора 2D. Авторы вооружают читателей беспрецедентно глубокими знаниями модели событий и системы компоновки Qt.
На реалистических примерах они описывают высокоэффективные методы во всех областях — от разработки основных элементов графического пользовательского интерфейса до передовых методов интеграции с базой данных и XML. Каждая глава содержит полностью обновленный материал.
Данное издание:
• Включает новые главы по архитектуре Qt 4 модель/представление и поддержке подключаемых модулей Qt, а также краткое введение в программирование встроенных систем на платформе Qtopia.
• Раскрывает все основные принципы программирования в среде Qt — от создания диалоговых и других окон до реализации функциональности приложений.
• Знакомит с передовыми методами управления компоновкой виджетов и обработкой событий.
• Показывает, как можно с наибольшей эффективностью использовать новые программные интерфейсы Qt 4, в частности мощный графический процессор 2D и новые простые в применении классы—контейнеры.
• Представляет передовые методы Qt 4, которых нет ни в одной книге: от создания подключаемых модулей, расширяющих возможности Qt, и приложений, до применения «родных» для конкретной платформы программных интерфейсов.
• Содержит приложение с подробным введением в программирование на С++ в среде Qt для опытных Java—разработчиков.
Жасмин Бланшет (Jasmine Blanchette) — менеджер по документированию и старший разработчик компании «Trolltech» с 2001 года. Он является редактором «Qt Quarterly», информационного бюллетеня компании «Trolltech», и соавтором книги «Qt 3: программирование GUI на С++».
Марк Саммерфилд (Mark Summerfield) — независимый преподаватель и консультант по С++, Qt и Python. Он работал менеджером по документированию в компании «Trolltech» на протяжении трех лет. Марк является соавтором книги «Qt 3: программирование GUI на С++».
QT 4: программирование GUI на С++ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
• Можно использовать стандартный класс std::vector:
#include
using namespace std;
vector fibonacci(n);
Обращаться к элементам можно с помощью оператора [], как это делается для обычного массива С++. При использовании вектора std::vector (где T — тип элемента, хранимого в векторе) можно изменить его размер в любой момент с помощью функции resize(), и его можно копировать, применяя оператор присваивания. Классы, содержащие угловые скобки в имени, называются шаблонными классами.
• Можно использовать класс Qt QVector:
#include
QVector fibonacci(n);
Программный интерфейс вектора QVector очень похож на интерфейс вектора std::vector, кроме того, он поддерживает возможность прохода по его элементам с помощью ключевого слова Qt foreach и использует неявное совмещение данных («копирование при записи») как метод оптимизации расхода памяти и повышения быстродействия. В главе 11представлены классы—контейнеры Qt и объясняется их связь со стандартными контейнерами С++.
Может возникнуть соблазн применения везде векторов std::vector или QVector вместо встроенных массивов. Тем не менее полезно иметь представление о работе встроенных массивов, потому что рано или поздно вам может потребоваться очень быстрый программный код или придется использовать существующие библиотеки С.
Символьные строки
Основной способ представления символьных строк в С++ заключается в применении массива символов char, завершаемого нулевым байтом ('\0'). Следующие четыре функции демонстрируют работу таких строк:
01 void hello1()
02 {
03 const char str[] = {
04 'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r' 'l', 'd', '\0'
05 };
06 cout << str << endl;
07 }
08 void hello2()
09 {
10 const char str[] = "Hello world!";
11 cout << str << endl;
12 }
13 void hello3()
14 {
15 cout << "Hello world!" << endl;
16 }
17 void hello4()
18 {
19 const char *str = "Hello world!";
20 cout << str << endl;
21 }
В первой функции строка объявляется как массив и инициализируется посимвольно. Обратите внимание на символ в конце '\0', обозначающий конец строки. Вторая функция имеет аналогичное определение массива, но на этот раз для инициализации массива используется строковый литерал. В С++ строковые литералы — это просто массивы символов const char, завершающиеся символом '\0', который не указывается в литерале. В третьей функции строковый литерал используется непосредственно без придания ему имени. После перевода на инструкции машинного языка она будет идентична первым двум функциям.
Четвертая функция немного отличается, поскольку создает не только массив (без имени), но и переменную—указатель с именем str, в которой хранится адрес первого элемента массива. Несмотря на это, семантика данной функции идентична семантике предыдущих трех функций, и оптимизирующий компилятор удалит лишнюю переменную str.
Функции, принимающие в качестве аргументов строки С++, обычно объявляют их как char * или const char *. Ниже приводится короткая программа, иллюстрирующая оба подхода:
01 #include
02 #include
03 using namespace std;
04 void makeUppercase(char *str)
05 {
06 for (int i = 0; str[i] != '\0'; ++i)
07 str[i] = toupper(str[i]);
08 }
09 void writeLine(const char *str)
10 {
11 cout << str << endl;
12 }
13 int main(int argc, char *argv[])
14 {
15 for (int i = 1; i < argc; ++i) {
16 makeUppercase(argv[i]);
17 writeLine(argv[i]);
18 }
19 return 0;
20 }
В С++ тип char обычно занимает 8 бит. Это значит, что в массиве символов char легко можно хранить строки в кодировке ASCII, ISO 8859-1 (Latin-1) и в других 8-битовых кодировках, но нельзя хранить произвольные символы Unicode, если не прибегать к многобайтовым последовательностям. Qt предоставляет мощный класс QString, который хранит строки Unicode в виде последовательностей 16-битовых символов QChar и при их реализации использует оптимизацию неявного совмещения данных («копирование при записи»). Более подробно строки QString рассматриваются в главе 11(«Классы—контейнеры») и в главе 17(«Интернационализация»).
Перечисления
С++ позволяет с помощью перечисления объявлять набор поименованных констант аналогично тому, как это делается в C#. Предположим, что в программе требуется хранить названия дней недели:
enum DayOfWeek {
Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
};
Обычно это объявление располагается в заголовочном файле или даже внутри класса. Приведенное выше объявление на первый взгляд представляется эквивалентным следующим определениям констант:
const int Sunday = 0;
const int Monday = 1;
const int Tuesday = 2;
const int Wednesday = 3;
const int Thursday = 4;
const int Friday = 5;
const int Saturday = 6;
Применяя конструкцию перечисления, мы можем затем объявлять переменные или параметры типа DayOfWeek, и компилятор гарантирует возможность присваивания им только значений перечисления DayOfWeek. Например:
DayOfWeek day = Sunday;
Если нас мало волнует обеспечение защищенности типов, мы можем просто написать
int day = Sunday;
Обратите внимание на то, что при ссылке на константу Sunday из перечисления DayOfWeek мы пишем просто Sunday, а не DayOfWeek::Sunday.
По умолчанию компилятор назначает последовательные целочисленные значения константам перечисления, начиная с нуля. При необходимости можно назначить другие значения:
enum DayOfWeek {
Sunday = 628,
Monday = 616,
Tuesday = 735,
Wednesday = 932,
Thursday = 852,
Friday = 607,
Saturday = 845
};
Если значение не задается для элемента перечисления, этот элемент примет значение предыдущего элемента, увеличенное на 1. Перечисления иногда используются для объявления целочисленных констант, и в этих случаях перечислению обычно имя не задают:
enum {
FirstPort = 1024, MaxPorts = 32767
};
Другой областью применения перечислений является представление набора опций. Рассмотрим пример диалогового окна Find (поиск) с четырьмя переключателями, которые управляют алгоритмом поиска (применение шаблона поиска, учет регистра, поиск в обратном направлении и повторение поиска с начала документа). Это можно представить в виде перечисления, значения констант которого равны некоторой степени 2:
enum FindOption {
NoOptions = 0x00000000,
WildcardSyntax = 0x00000001,
CaseSensitive = 0x00000002,
SearchBackward = 0x00000004,
WrapAround = 0x00000008
};
Каждая опция часто называется «флажком». Флажки можно объединять при помощи логических поразрядных операторов | или |=:
Читать дальшеИнтервал:
Закладка: