Жасмин Бланшет - QT 4 - программирование GUI на С++

Здесь есть возможность читать онлайн «Жасмин Бланшет - QT 4 - программирование GUI на С++» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: КУДИЦ-ПРЕСС, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

QT 4: программирование GUI на С++: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «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 на С++ — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «QT 4: программирование GUI на С++», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

01 void Tetrahedron::paintGL()

02 {

03 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

04 draw();

05 }

Функция paintGL() вызывается всякий раз, когда необходимо перерисовать виджет. Это напоминает функцию QWidget::paintEvent(), но вместо функций класса QPainter здесь мы используем функции библиотеки OpenGL. Реальное рисование выполняется закрытой функцией draw().

01 void Tetrahedron::draw()

02 {

04 static const GLfloat P1[3]= { 0.0, -1.0, +2.0 };

05 static const GLfloat P2[3] = { +1.73205081, -1.0, -1.0 };

06 static const GLfloat P3[3] = { -1.73205081, -1.0, -1.0 };

07 static const GLfloat P4[3] = { 0.0, +2.0, 0.0 };

08 static const GLfloat * const coords[4][3] = {

09 { P1, P2, РЗ }, { P1, РЗ, P4 }, { P1, P4, P2 }, { P2, P4, РЗ }

10 };

11 glMatrixMode(GL_MODELVIEW);

12 glLoadIdentity();

13 glTranslatef(0.0, 0.0, -10.0);

14 glRotatef(rotationX, 1.0, 0.0, 0.0);

15 glRotatef(rotationY, 0.0, 1.0, 0.0);

16 glRotatef(rotationZ, 0.0, 0.0, 1.0);

17 for (int i = 0; i < 4; ++i) {

18 glLoadName(i);

19 glBegin(GL_TRIANGLES);

20 qglColor(faceColors[i]);

21 for (int j = 0; j < 3; ++j) {

22 glVertex3f(coords[i][j][0],

23 coords[i][j][1], coords[i][j][2]);

24 }

25 glEnd();

26 }

27 }

В функции draw() мы рисуем тетраэдр, учитывая повороты по осям x, у и z, а также цвета в массиве faceColors. Везде вызываются стандартные функции библиотеки OpenGL, за исключением вызова qglColor(). Вместо этого мы могли бы использовать одну из функций OpenGL — glColor3d() или glIndex() — в зависимости от используемого режима.

01 void Tetrahedron::mousePressEvent(QMouseEvent *event)

02 {

03 lastPos = event->pos();

04 }

05 void Tetrahedron::mouseMoveEvent(QMouseEvent *event)

06 {

07 GLfloat dx = GLfloat(event->x() - lastPos.x()) / width();

08 GLfloat dy = GLfloat(event->y() - lastPos.y()) / height();

09 if (event->buttons() & Qt::LeftButton) {

10 rotationX += 180 * dy;

11 rotationY += 180 * dx;

12 updateGL();

13 } else if (event->buttons() & Qt::RightButton) {

14 rotationX += 180 * dy;

15 rotationZ += 180 * dx;

16 updateGL();

17 }

18 lastPos = event->pos();

19 }

Функции класса QWidget mousePressEvent() и mouseMoveEvent() переопределяются, чтобы разрешить пользователю поворачивать изображение щелчком мышки и ее перемещением. Левая кнопка мышки позволяет пользователю поворачивать вокруг осей x и у, а правая кнопка мышки — вокруг осей x и z.

После модификации переменных rotationX и rotationY или rotationZ мы вызываем функцию updateGL() для перерисовки сцены.

01 void Tetrahedron::mouseDoubleClickEvent(QMouseEvent *event)

02 {

03 int face = faceAtPosition(event->pos());

04 if (face != -1) {

05 QColor color = QColorDialog::getColor(faceColors[face], this);

06 if (color.isValid()) {

07 faceColors[face] = color;

08 updateGL();

09 }

10 }

11 }

Функция mouseDoubleClickEvent() класса QWidget переопределяется, чтобы разрешить пользователю устанавливать цвет грани тетраэдра с помощью двойного щелчка. Мы вызываем закрытую функцию faceAtPosition() для определения той грани, на которой находится курсор (если он вообще находится на какой-нибудь грани). При двойном щелчке по грани тетраэдра мы вызываем функцию QColorDialog::getColor() для получения нового цвета для этой грани. Затем мы обновляем массив цветов faceColors новым цветом, и мы вызываем функцию updateGL() для перерисовки экрана.

01 int Tetrahedron::faceAtPosition(const QPoint &pos)

02 {

03 const int MaxSize = 512;

04 GLuint buffer[MaxSize];

05 GLint viewport[4];

06 glGetIntegerv(GL_VIEWPORT, viewport);

07 glSelectBuffer(MaxSize, buffer);

08 glRenderMode(GL_SELECT);

09 glInitNames();

10 glPushName(0);

11 glMatrixMode(GL_PROJECTION);

12 glPushMatrix();

13 glLoadIdentity();

14 gluPickMatrix(GLdouble(pos.x()),

15 GLdouble(viewport[3] - pos.y()),

16 5.0, 5.0, viewport);

17 GLfloat x = GLfloat(width()) / height();

18 glFrustum(-x, x, -1.0, 1.0, 4.0, 15.0);

19 draw();

20 glMatrixMode(GL_PROJECTION);

21 glPopMatrix();

22 if (!glRenderMode(GL_RENDER))

23 return -1;

24 return buffer[3];

25 }

Функция faceAtPosition() возвращает номер грани для заданной точки виджета или —1, если данная точка не попадает на грань. Программный код этой функции, выполненной с помощью средств OpenGL, немного сложен. Фактически мы переводим работу в режим GL_SELECT, чтобы воспользоваться возможностями OpenGL по идентификации элементов изображения, и затем получаем номер грани (ее «имя») из записи нажатия OpenGL.

Ниже приводится файл main.cpp:

01 #include

02 #include

03 #include "tetrahedron.h"

04 using namespace std;

05 int main(int argc, char *argv[])

06 {

07 QApplication app(argc, argv);

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «QT 4: программирование GUI на С++»

Представляем Вашему вниманию похожие книги на «QT 4: программирование GUI на С++» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Бертрис Смолл - Дикарка Жасмин
Бертрис Смолл
Георгий Семенов - Жасмин в тени забора
Георгий Семенов
Жасмин Гиллори - Свадебное свидание
Жасмин Гиллори
Жасмин Майер - Онлайн
Жасмин Майер
Отзывы о книге «QT 4: программирование GUI на С++»

Обсуждение, отзывы о книге «QT 4: программирование GUI на С++» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x