Жасмин Бланшет - 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 или QVector, мы можем задать тип T и извлекать элементы без приведения типа. Кроме того, для элементарных типов некоторые преобразования происходят неявно (например, преобразование char в int), а для пользовательских типов можно определить неявные преобразования, предусматривая конструктор с одним параметром. Например:
class MyInteger
{
public:
MyInteger();
MyInteger(int i);
…
};
int main()
{
MyInteger n;
n = 5;
…
}
Автоматическое преобразование, обеспечиваемое некоторыми конструкторами с одним параметром, имеет мало смысла. Его можно отключить, если объявить конструктор с ключевым словом explicit:
class MyVector
{
public:
explicit MyVector(int size);
…
};
Перегрузка операторов
С++ позволяет нам перегружать функции, т.е. мы можем объявлять несколько функций с одним именем в одной и той же области видимости, если они имеют различные списки параметров. Кроме того, С++ поддерживает перегрузку операторов, позволяя назначать специальную семантику встроенным операторам (таким, как +, << и [ ]) при их применении для пользовательских типов.
Мы уже видели несколько примеров с перегруженными операторами. Когда использовался оператор << для вывода текста в поток cout или cerr, мы не пользовались оператором С++, выполняющим поразрядный сдвиг влево, но использовали специальную версию этого оператора, принимающего слева объект потока ostream (например, cout или cerr), а справа — строку (либо вместо строки число или манипулятор потока, например endl) и возвращающего объект ostream, что позволяет несколько раз вызывать оператор в одной строке.
Красота перегрузки операторов заключается в возможности сделать поведение пользовательских типов в точности таким же, как поведение встроенных типов. Чтобы показать, как работает такая перегрузка, мы перегрузим операторы +=, —=, + и —, добавив возможность работы с объектами Point2D:
01 #ifndef POINT2D_H
02 #define POINT2D_H
03 class Point2D
04 {
05 public:
06 Point2D();
07 Point2D(double x, double у);
08 void setX(double x);
09 void setY(double у);
10 double x() const;
11 double y() const;
12 Point2D &operator+=(const Point2D &other)
13 {
14 xVal += other.xVal;
15 yVal += other.yVal;
16 return *this;
17 }
18 Point2D &operator-=(const Point2D &other)
19 {
20 xVal -= other.xVal;
21 yVal -= other.yVal;
22 return *this;
23 }
24 private:
25 double xVal;
26 double yVal;
27 };
28 inline Point2D operator+(const Point2D &a, const Point2D &b)
29 {
30 return Point2D(a.x() + b.x(), a.y() + b.y());
31 }
32 inline Point2D operator-(const Point2D &a, const Point2D &b)
33 {
34 return Point2D(a.x() - b.x(), a.y() - b.y());
35 }
36 #endif
Операторы можно реализовать либо как функции—члены, либо как глобальные функции. В нашем примере мы реализовали операторы += и —= как функции—члены, а операторы + и — как глобальные функции.
Операторы += и —= принимают ссылку на другой объект Point2D и увеличивают или уменьшают координаты x и у текущего объекта на значение координат другого объекта. Они возвращают *this, т.е. ссылку на текущий объект (this имеет тип Point2D *). Возвращение ссылки позволяет создавать экзотический программный код, например:
a += b += с;
Операторы + и — принимают два параметра и возвращают значение объекта Point2D (а не ссылку на существующий объект). Ключевое слово inline позволяет поместить эти функции в заголовочный файл. Если бы тело функции было более длинным, мы бы поместили в заголовочный файл прототип функции, а определение функции (без ключевого слова inline) в файл .cpp.
Следующие фрагменты программного кода показывают, как можно использовать все четыре перегруженных оператора:
Point2D beta(77.5, 50.0);
Point2D alpha(12.5, 40.0);
alpha += beta;
beta -= alpha;
Point2D gamma = alpha + beta;
Point2D delta = beta - alpha;
Кроме того, можно вызывать функции operator точно так же, как вызываются любые другие функции:
Point2D beta(77.5, 50.0);
Point2D alpha(12.5, 40.0);
alpha.operator+=(beta);
beta.operator-=(alpha);
Point2D gamma = operator+(alpha, beta);
Point2D delta = operator-(beta, alpha);
Перегрузка операторов в С++ представляет собой сложную тему, однако мы вполне можем пока обходиться без знания всех деталей. Все же важно понимать принципы перегрузки операторов, потому что несколько классов Qt (в том числе QString и QVector) используют их для обеспечения простого и более естественного синтаксиса для таких операций, как конкатенация и добавление в конец объекта.
Типы значений
B Java и C# различаются типы значений и типы ссылок.
• Типы значений.Это такие элементарные типы, как char, int и float, а также структуры struct в C#. Характерным для них является то, что для их создания не используется оператор new и оператор присваивания копирует значение переменной. Например:
int i = 5;
int j = 10;
i = j;
• Типы ссылок.Это такие классы, как Integer (в Java), String и MyVeryOwnClass. Их экземпляры создаются при помощи оператора new. Оператор присваивания копирует только ссылку на объект, а для действительного копирования объекта мы должны вызывать функцию clone() (в Java) или Clone() (в C#). Например:
Integer i = new Integer(5);
Integer j = new Integer(10);
i = j.clone();
В С++ все типы могут использоваться как «типы ссылок», а в дополнение к этому те из них, которые допускают копирование, могут использоваться как «типы значений». Например, в С++ нет необходимости иметь класс, подобный Integer, потому что можно использовать указатели и оператор new:
int *i = new int(5);
int *j = new int(10);
*i = *j;
В отличие от Java и C#, в С++ определяемые пользователем типы используются так же, как встроенные типы:
Point2D *i = new Point2D(5, 5);
Point2D *j = new Point2D(10, 10);
*i = *j;
Если требуется сделать класс С++ копируемым, необходимо предусмотреть в этом классе конструктор копирования и оператор присваивания. Конструктор копирования вызывается при инициализации объекта другим объектом того же типа. Синтаксически в С++ это обеспечивается двумя способами:
Читать дальшеИнтервал:
Закладка: