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

Тут можно читать бесплатно Жасмин Бланшет - QT 4: программирование GUI на С++. Жанр: Компьютеры и Интернет / Программирование, год -. Так же Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте FullBooks.club (Фулбукс) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Жасмин Бланшет - QT 4: программирование GUI на С++

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту pbn.book@yandex.ru для удаления материала


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

Мы начинаем расчет с «крупного шага», то есть с определенного максимального значения шага. Затем мы находим число вида 10n, меньшее или равное крупному шагу. Мы его получаем путем взятия десятичного логарифма от крупного шага, затем округляем полученное значение до целого числа, после чего возводим 10 в степень, равную этому округленному значению. Например, если крупный шаг равен 236, мы вычисляем log 236 = 2.37291…; затем мы округляем это значение до 2 и получаем 102 = 100 в качестве кандидата на значениешага в форме числа 10n.

После получения первого кандидата на значение шага мы можем его использовать для расчета двух других кандидатов: 2 • 10n и 5 • 10n. Для нашего примера два других кандидата являются числами 200 и 500. Кандидат 500 имеет значение большее, чем крупный шаг, и поэтому мы не можем использовать его. Но 200 меньше, чем 236, и поэтому мы можем использовать 200 в качестве размера шага в нашем примере.

Достаточно легко получить numTicks, min и max из значения шага. Новое значение min получается путем округления снизу первоначального min до ближайшего числа, кратного этому шагу, а новое значение max получается путем округления сверху до ближайшего числа, кратного этому шагу. Новое значение numTicks представляет собой количество интервалов между округленными значениями min и max. Например, если при входе в функцию min равно 240, а max равно 1184, то новый диапазон будет равен [200, 1200] с пятью отметками.

Этот алгоритм в некоторых случаях дает почти оптимальный результат. Более изощренный алгоритм описан в статье Поля С. Хекберта (Paul S. Heckbert) «Nice Numbers for Graph Labels» (удобные числа для меток графа), опубликованной в Graphics Gems (ISBN 0—12—286166—3).

Данная глава является последней в части I. В ней объяснены способы настройки существующего виджета Qt и способы построения виджета с использованием в качестве основы базового класса виджетов QWidget. В главе 2 мы уже узнали, как можно построить виджет на основе существующих виджетов, и мы еще вернемся к этой теме в главе 6.

К этому моменту у нас достаточно знаний для написания законченных приложений с графическим интерфейсом с помощью средств разработки Qt. В частях II и III мы проведем более глубокое исследование Qt, чтобы можно было в полной мере использовать возможности Qt.

Часть II. Средний уровень Qt—программирования

Глава 6. Управление компоновкой

Каждому размещаемому в форме виджету необходимо задать соответствующие размер и позицию. Qt содержит несколько классов, обеспечивающих компоновку виджетов на форме: QHBoxLayout, QVBoxLayout, QGridLayout и QStackLayout. Эти классы настолько удобно и просто применять, что почти каждый Qt—разработчик их использует либо непосредственно в исходном коде программы, либо через Qt Designer.

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

К другим классам, управляющим компоновкой, относятся QSplitter, QScrollArea, QMainWindow и QWorkspace. Общая черта этих классов — обеспечение гибкой компоновки виджетов, которой может управлять пользователь. Например, QSplitter обеспечивает наличие разделительной линии, которую пользователь может передвигать для изменения размеров виджетов, a QWorkspace обеспечивает поддержку MDI (multiple document interface — многодокументный интерфейс), позволяющего в главном окне приложения показывать сразу несколько документов. Поскольку эти классы часто используются как альтернатива основным классам компоновки, они также рассматриваются в данной главе.

Компоновка виджетов на форме

Существует три основных способа управления компоновкой дочерних виджетов формы: абсолютное позиционирование, ручная компоновка и применение менеджеров компоновки. Мы рассмотрим по очереди каждый из этих методов, используя в качестве нашего примера диалоговое окно Find File (найти файл), показанное на рис. 6.1.

Рис. 6.1. Окно диалога Find File.

Абсолютное позиционирование является самым негибким способом компоновки виджетов. Он предусматривает жесткое кодирование в программе размеров и позиций дочерних виджетов формы и фиксированный размер самой формы. Ниже показано, какой вид принимает конструктор FindFileDialog при применении абсолютного позиционирования:

01 FindFileDialog::FindFileDialog(QWidget *parent)

02 : QDialog(parent)

03 {

04 namedLabel->setGeometry(9, 9, 50, 25);

05 namedLineEdit->setGeometry(65, 9, 200, 25);

06 lookInLabel->setGeometry(9, 40, 50, 25);

07 lookInLineEdit->setGeometry(65, 40, 200, 25);

08 subfoldersCheckBox->setGeometry(9, 71, 256, 23);

09 tableWidget->setGeometry(9, 100, 256, 100);

10 messageLabel->setGeometry(9, 206, 256, 25);

11 findButton->setGeometry(271, 9, 85, 32);

12 stopButton->setGeometry(271, 47, 85, 32);

13 closeButton->setGeometry(271, 84, 85, 32);

14 helpButton->setGeometry(271, 199, 85, 32);

15 setWindowTitle(tr("Find Files or Folders"));

16 setFixedSize(365, 240);

17 }

Абсолютное позиционирование имеет много недостатков:

• пользователь не может изменить размер окна;

• некоторый текст может оказаться отсеченным, если пользователь выбирает необычно большой шрифт или если приложение переводится на другой язык;

• виджеты могут иметь неправильные размеры для некоторых стилей;

• расчет позиций и размеров должен производиться вручную. Этот процесс утомителен и приводит к ошибкам; кроме того, это сильно затрудняет сопровождение.

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

01 FindFileDialog::FindFileDialog(QWidget *parent)

02 : QDialog(parent)

03 {

04 SetMinimumSize(265, 190);

05 resize(365, 240);

06 }

07 void FindFileDialog::resizeEvent(QResizeEvent * /* event */)

08 {

09 int extraWidth = width() - minimumWidth();

10 int extraHeight = height() - minimumHeight();

11 namedLabel->setGeometry(9, 9, 50, 25);

12 namedLineEdit->setGeometry(65, 9, 100 + extraWidth, 25);

13 lookInLabel->setGeometry(9, 40, 50, 25);

14 lookInLineEdit->setGeometry(65, 40, 100 + extraWidth, 25);

15 subfoldersCheckBox->setGeometry(9, 71, 156 + extraWidth, 23);

16 tableWidget->setGeometry(9, 100, 156 + extraWidth, 50 + extraHeight);

17 messageLabel->setGeometry(9, 156 + extraHeight, 156 + extraWidth, 25);

18 findButton->setGeometry(171 + extraWidth, 9, 85, 32);

19 stopButton->setGeometry(171 + extraWidth, 47, 85, 32);

20 closeButton->setGeometry(171 + extraWidth, 84, 85, 32);

21 helpButton->setGeometry(171 + extraWidth, 149 + extraHeight, 85, 32);

22 }

Мы устанавливаем в конструкторе FindFileDialog минимальный размер формы на значение 265 × 190 и ее начальный размер на значение 365 × 240. В обработчике событий resizeEvent() мы отдаем все дополнительное пространство виджетам, размеры которых мы хотим увеличить. Это обеспечивает плавное изменение вида формы при изменении пользователем ее размеров.

Рис. 6.2. Изменение размеров диалогового окна, допускающего изменение своих размеров.

Точно так же, как при абсолютном позиционировании, при ручной компоновке в программе приходится жестко задавать много констант, рассчитываемых программистом. Написание подобной программы представляет собой нудное занятие, особенно если проект изменяется. И все-таки существует риск отсечения текста. Этого риска можно избежать, принимая во внимание идеальные размеры дочерних виджетов, но это еще больше усложняет программу.

Самый удобный метод компоновки виджетов на форме — использование менеджеров компоновки Qt. Менеджеры компоновки обеспечивают осмысленные, принимаемые по умолчанию значения параметров для каждого типа виджета и учитывают идеальный размер каждого виджета, который, в свою очередь, обычно зависит от шрифта виджета, его стиля и содержимого. Менеджеры компоновки также учитывают максимальные и минимальные размеры и автоматически подстраивают компоновку в ответ на изменения шрифта, изменения содержимого и изменения размеров окна.

Перейти на страницу:
Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.
Комментарии / Отзывы
    Ничего не найдено.