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

Тут можно читать онлайн Жасмин Бланшет - QT 4: программирование GUI на С++ - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство КУДИЦ-ПРЕСС, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    QT 4: программирование GUI на С++
  • Автор:
  • Жанр:
  • Издательство:
    КУДИЦ-ПРЕСС
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    978-5-91136-038-2
  • Рейтинг:
    3.75/5. Голосов: 121
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

QT 4: программирование GUI на С++ - описание и краткое содержание, автор Жасмин Бланшет, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Единственное официальное руководстро по практическому программированию в среде 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 на С++ - читать книгу онлайн бесплатно, автор Жасмин Бланшет
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

const int MaxMinutes = 45;

const int MaxSeconds = MaxMinutes * 60;

const int UpdateInterval = 1;

Мы начнем с нескольких констант, управляющих внешним видом и режимом работы таймера духовки.

01 OvenTimer::OvenTimer(QWidget *parent)

02 : QWidget(parent)

03 {

04 finishTime = QDateTime::currentDateTime();

05 updateTimer = new QTimer(this);

06 connect(updateTimer, SIGNAL(timeouf()),

07 this, SLOT(update()));

08 finishTimer = new QTimer(this);

09 finishTimer->setSingleShot(true);

10 connect(finishTimer, SIGNAL(timeout()),

11 this, SIGNAL(timeout()));

12 connect(finishTimer, SIGNAL(timeout()),

13 updateTimer, SLOT(stop()));

14 }

В конструкторе мы создаем два объекта QTimer: updateTimer используется для обновления внешнего вида виджета через каждую секунду, a finishTimer генерирует сигнал виджета timeout() при достижении отметки 0. Объект finishTimer должен генерировать только один сигнал тайм-аута, поэтому мы вызываем setSingleShot(true); по умолчанию таймеры запускаются повторно, пока они не будут остановлены или не будут уничтожены. Последний вызов connect() является оптимизационным и обеспечивает прекращение обновления виджета каждую секунду, когда таймер неактивен.

01 void OvenTimer::setDuration(int secs)

02 {

03 if (secs > MaxSeconds) {

04 secs = MaxSeconds;

05 } else if (secs <= 0) {

06 secs = 0;

07 }

08 finishTime = QDateTime::currentDateTime().addSecs(secs);

09 if (secs > 0) {

10 updateTimer->start(UpdateInterval * 1000);

11 finishTimer->start(secs * 1000);

12 } else {

13 updateTimer->stop();

14 finishTimer->stop();

15 }

16 update();

17 }

Функция setDuration() выставляет таймер духовки, задавая требуемое количество секунд. Время окончания мы рассчитываем путем добавления продолжительности его работы к текущему времени, полученному функцией QDateTime::currentDateTime(), и сохраняем его в закрытой переменной finishTime. B конце мы вызываем update() для перерисовки виджета с новой продолжительностью работы.

Переменная finishTime имеет тип QDateTime. Поскольку она содержит дату и время, мы избегаем ошибки из-за смены суток, когда текущее время оказывается до полуночи, а время окончания — после полуночи.

01 int OvenTimer::duration() const

02 {

03 int secs = QDateTime::currentDateTime().

04 secsTo(finishTime);

05 if (secs < 0)

06 secs = 0;

07 return secs;

08 }

Функция duration() возвращает количество секунд, оставшееся до завершения работы таймера. Если таймер неактивен, мы возвращаем 0.

01 void OvenTimer::mousePressEvent(QMouseEvent *event)

02 {

03 QPointF point = event->pos() - rect().center();

04 double theta = atan2(-point.x(), -point.y()) * 180 / 3.14159265359;

05 setDuration(duration() + int(theta / DegreesPerSecond));

06 update();

07 }

Если пользователь щелкает по этому виджету, мы находим ближайшую метку, используя тонкую, но эффективную математическую формулу, а результат идет на установку новой продолжительности таймера. Затем мы генерируем событие перерисовки. Метка, по которой щелкнул пользователь, теперь будет располагаться сверху поворотного диска и будет поворачиваться против часовой стрелки до тех пор, пока не будет достигнуто значение 0.

01 void OvenTimer::paintEvent(QPaintEvent * /* event */)

02 {

03 QPainter painter(this);

04 painter.setRenderHint(QPainter::Antialiasing, true);

05 int side = qMin(width(), height());

06 painter.setViewport((width() - side) / 2, (height() - side) / 2,

07 side, side);

08 painter.setWindow(-50, -50, 100, 100);

09 draw(&painter);

10 }

B paintEvent() мы устанавливаем область отображения на максимальный квадрат, который можно разместить внутри виджета, и мы устанавливаем окно на прямоугольник (—50, —50, 100, 100), то есть на прямоугольник с размерами 100 × 100, который покрывает пространство от точки (—50, —50) до точки (+50, +50). Шаблонная функция qMin возвращает наименьшее из двух значений аргументов. Затем мы вызываем функцию draw() для фактического вывода рисунка на экран.

Рис 810 Вид виджета OvenTimer при трех различных размерах Если область - фото 110

Рис. 8.10. Вид виджета OvenTimer при трех различных размерах.

Если область отображения не была бы квадратом, таймер духовки принял бы форму эллипса, когда форма виджета перестанет быть квадратной после изменения его размеров. Чтобы избежать такой деформации, мы должны устанавливать область отображения и окно на прямоугольник с одинаковым соотношением сторон.

Теперь давайте рассмотрим программный код рисования:

01 void OvenTimer::draw(QPainter *painter)

02 {

03 static const int triangle[3][2] = {

04 { -2, -49 }, { +2, -49 }, { 0, -47 }

05 };

10 QPen thickPen(palette().foreground(), 1.5);

11 QPen thinPen(palette().foreground(), 0.5);

12 QColor niceBlue(150, 150, 200);

13 painter->setPen(thinPen);

14 painter->setBrush(palette().foreground());

15 painter->drawPolygon(QPolygon(3, &triangle[0][0]));

Мы начинаем с отображения маленького треугольника в позиции 0 в верхней части виджета. Этот треугольник задается в программе тремя фиксированными координатами, и мы используем функцию drawPolygon() для его воспроизведения.

Одно из удобств применения механизма «окно—область отображения» заключается в том, что мы можем при программировании в командах рисования жестко задавать координаты точек и тем не менее добиваться необходимого изменения размеров.

16 QConicalGradient coneGradient(0, 0, -90.0);

17 coneGradient.setColorAt(0.0, Qt::darkGray);

18 coneGradient.setColorAt(0.2, niceBlue);

19 coneGradient.setColorAt(0.5, Qt::white);

20 coneGradient.setColorAt(1.0, Qt::darkGray);

21 painter->setBrush(coneGradient);

22 painter->drawEllipse(-46, -46, 92, 92);

Мы рисуем внешнюю окружность и заполняем ее, используя конический градиент. Центр градиента находится в точке (0, 0), а его угол равен —90°.

23 QRadialGradient haloGradient(0, 0, 20, 0, 0);

24 haloGradient.setColorAt(0.0, Qt::lightGray);

25 haloGradient.setColorAt(0.8, Qt::darkGray);

26 haloGradient.setColorAt(0.9, Qt::white);

27 haloGradient.setColorAt(1.0, Qt::black);

28 painter->setPen(Qt::NoPen);

29 painter->setBrush(haloGradient);

30 painter->drawEllipse(-20, -20, 40, 40);

Мы заполняем внутреннюю окружность, используя радиальный градиент. Центр и фокус градиента располагаются в точке (0, 0). Радиус градиента равен 20.

31 QLinearGradient knobGradient(-7, -25, 7, -25);

32 knobGradient.setColorAt(0.0, Qt::black);

33 knobGradient.setColorAt(0.2, niceBlue);

34 knobGradient.setColorAt(0.3, Qt::lightGray);

35 knobGradient.setColorAt(0.8, Qt::white);

36 knobGradient.setColorAt(1.0, Qt::black);

37 painter->rotate(duration() * DegreesPerSecond);

38 painter->setBrush(knobGradient);

39 painter->setPen(thinPen);

40 painter->drawRoundRect(-7, -25, 14, 50, 150, 50);

41 for (int i = 0; i <= MaxMinutes; ++i) {

42 if (i % 5 == 0) {

43 painter->setPen(thickPen);

44 painter->drawLine(0, -41, 0, -44);

45 painter->drawText(-15, -41, 30, 25,

46 Qt::AlignHCenter | Qt::AlignTop,

47 QString::number(i));

48 } else {

49 painter->setPen(thinPen);

50 painter->drawLine(0, -42, 0, -44);

51 }

52 painter->rotate(-DegreesPerMinute);

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

Интервал:

Закладка:

Сделать


Жасмин Бланшет читать все книги автора по порядку

Жасмин Бланшет - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




QT 4: программирование GUI на С++ отзывы


Отзывы читателей о книге QT 4: программирование GUI на С++, автор: Жасмин Бланшет. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x