Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Qt - кросс-платформенный инструментарий разработки ПО на языке программирования C++ от компании Qt Development Frameworks (ранее известна как Qt Software, Trolltech)


Лекция и Лабораторная работа

По курсу: Операционные системы

На тему: Среда программирования Qt

Выполнили:

Студенты группы А-06-09

Смирнов Андрей

Маругин Михаил

Содержание:

1.Введение

2.История

3.Развитие среды

4.Область применения

5.Общие сведения

6.Компоненты

7.Среда разработки

8.Работа с Qt Creator

9.Примеры

10.Задание на лабораторную работу

Введение

Есть также «привязки» ко многим другим языкам программирования: Python - PyQt, Ruby - QtRuby, Java - Qt Jambi, PHP - PHP-Qt и другие.

Позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путём простой компиляции программы для каждой ОС без изменения исходного кода. Включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. Qt является полностью объектно-ориентированным, легко расширяемым и поддерживающим технику компонентного программирования.

Начиная с версии 4.5 Qt распространяется с различными лицензиями. Это означает, что если вы собираетесь создавать коммерческие приложения, то должны приеобрести коммерческую лицензию Qt; если же создаётся программа с открытым исходным кодом, то можно использовать версию с лицензией GPL.

История

Средства разработки Qt впервые стали известны общественности в мае 1995 года. Первоначально Qt разрабатывалось Хаарвардом Нордом и Айриком Чеймб-Ингом.

В 1991 году Хаарвард начал писать классы, которые фактически образовали Qt, причём проектные решения принимались совместно с Айриком.

В следующем году Айрику пришла идея «сигналов и слотов» — простой, но мощной парадигмы программирования GUI, которая в настоящее время заимствована некоторыми другими инструментами.

К 1993 году Хаарвард и Айрик разработали первое графическое ядро Qt и могли создавать собственные виджеты.



Неинтересные заметки: Буква «Q» была выбрана в качестве префикса классов, поскольку эта буква имела красивое начертание в шрифте Emacs, которым пользовался Хаарвард. Была добавлена буква «t», означающая «toolkit»(инструментарий).

Развитие

В апреле 1995 года - норвежская компания «Metis» заключила с ними контракт на разработку программного обеспечения на основе Qt.

26 мая 1995 года - первая публичная версия Qt. Qt можно было использовать в разработках как Windows, так и Unix, причём программный интерфейс был одинаковый на обеих платформах.

С 1996 по 2001 год – развитие до версии Qt3. Qt теперь работала в системах Windows, Mac Os X, Unix.

Лето 2005 года - выпущена Qt 4.0. Имея около 500 классов и более 9000 функций, Qt 4 оказалась больше и богаче любой предыдущей версии; она была разбита на несколько библиотек, чтобы разработчики могли использовать только нужные им части Qt.

На сегодняшный день версия Qt4.8

Версия Qt 4 представляет собой большой шаг вперёд по сравнению с предыдущими версиями; она содержит полностью новый набор эффективных и простых в применении классов-контейнеров, усовершенствованную функциональность архитекторы модель/представление, быстрый и гибкий фреймфорк графики 2D и мощные классы для просмотра и редактирования текста в кодировке Unicode, не говоря уже о тысячах небольших улучшений по всему спектру классов Qt.

Qt 4 является первой версией Qt, доступной на всех поддерживаемых платформах как для коммерческой разработки, так и для разработки с открытым исходным кодом.

Область применения

Возможность создавать desktop-приложения для Windows, Linux, Mac OS X (как консольные, так и с оконным графическим интерфейсом). В последние несколько лет наблюдается тенденция увеличения количества выпускаемых мобильных устройств. В следствии чего Qt портировали на мобильные платформы: Symbian, Maemo, MeeGo. Также известно об удачном опыте портрования Qt Lighthouse на платформу Android.

 

Общие сведения

Позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путём простой компиляции программы для каждой ОС без изменения исходного кода.

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

Qt является полностью объектно-ориентированным, легко расширяемым и поддерживающим технику компонентного программирования.

Существуют версии библиотеки для Microsoft Windows, систем класса UNIX с графической подсистемой X11, iOS, Android, Mac OS X, Microsoft Windows CE, QNX[7], встраиваемых Linux-систем и платформы S60. В данный момент рассматривается возможность внедрения поддержки Qt в Windows Phone. Также идёт портирование на Haiku.

Отличительная особенность Qt от других библиотек — использование Meta Object Compiler (MOC) — предварительной системы обработки исходного кода (в общем-то, Qt — это библиотека не для чистого C++, а для его особого наречия, с которого и «переводит» MOC для последующей компиляции любым стандартным C++ компилятором). MOC позволяет во много раз увеличить мощь библиотек, вводя такие понятия, как слоты и сигналы. Кроме того, это позволяет сделать код более лаконичным. Утилита MOC ищет в заголовочных файлах на C++ описания классов, содержащие макрос Q_OBJECT, и создаёт дополнительный исходный файл на C++, содержащий метаобъектный код.

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

Qt комплектуется визуальной средой разработки графического интерфейса «Qt Designer», позволяющей создавать диалоги и формы в режиме WYSIWYG.

В поставке Qt есть «Qt Linguist» — графическая утилита, позволяющая упростить локализацию и перевод программы на многие языки; и «Qt Assistant» — справочная система Qt, упрощающая работу с документацией по библиотеке, а также позволяющая создавать кросс-платформенную справку для разрабатываемого на основе Qt ПО. Начиная с версии 4.5.0 в комплект Qt включена среда разработки «Qt Creator», которая включает в себя редактор кода, справку, графические средства «Qt Designer» и возможность отладки приложений. «Qt Creator» может использовать GCC или Microsoft VC++ в качестве компилятора и GDB в качестве отладчика. Для Windows версий библиотека комплектуется компилятором, заголовочными и объектными файлами MinGW.



Компоненты (выделим парочку)

Библиотека разделена на несколько модулей, для четвёртой версии библиотеки это:

QtCore — классы ядра библиотеки, используемые другими модулями;

QtGui — компоненты графического интерфейса;

QtNetwork — набор классов для сетевого программирования. Поддержка различных высокоуровневых протоколов может меняться от версии к версии. В версии 4.2.x присутствуют классы для работы с протоколами FTP и HTTP. Для работы с протоколами TCP/IP предназначены такие классы, как QTcpServer, QTcpSocket для TCP и QUdpSocket для UDP;

QtOpenGL — набор классов для работы с OpenGL;

QtSql — набор классов для работы с базами данных с использованием языка структурированных запросов SQL. Основные классы данного модуля в версии 4.2.х: QSqlDatabase — класс для предоставления соединения с базой, для работы с какой-нибудь конкретной базой данных требует объект, унаследованный от класса QSqlDriver — абстрактного класса, который реализуется для конкретной базы данных и может требовать для компиляции SDK базы данных. Например, для сборки драйвера под базу данных FireBird/InterBase требует .h файлы и библиотеки статической линковки, входящие в комплект поставки данной БД;

QtScript — классы для работы с Qt Scripts;

QtSvg — классы для отображения и работы с данными Scalable Vector Graphics (SVG);

QtXml — модуль для работы с XML, поддерживается SAX и DOM модели работы;

QtDesigner — классы создания расширений QtDesigner’а для своих собственных виджетов;

QtUiTools — классы для обработки в приложении форм Qt Designer;

QtAssistant — справочная система;

Qt3Support — модуль с классами, необходимыми для совместимости с библиотекой Qt версии 3.х.х;

QtTest — модуль для работы с UNIT тестами;

QtWebKit — модуль WebKit, интегрированный в Qt и доступный через её классы;

QtXmlPatterns — модуль для поддержки XQuery 1.0 и XPath 2.0;

Phonon — модуль для поддержки воспроизведения и записи видео и аудио, как локально, так и с устройств и по сети;

QtCLucene — модуль для поддержки полнотекстового поиска, применяется в новой версии Assistant в Qt 4.4;

ActiveQt — модуль для работы с ActiveX и COM технологиями для Qt-разработчиков под Windows.

QtDeclarative — модуль, предоставляющий декларативный фреймворк для создания динамичных, настраиваемых пользовательских интерфейсов.

Библиотека использует собственный формат проекта, именуемый .pro файлом, в котором собрана информация о том, какие файлы будут скомпилированы, по каким путям искать заголовочные файлы и много другой информации.

Впоследствии при помощи утилиты qmake из них получаются makefile для make-утилиты компилятора. Также есть возможность работы при помощи интеграторов с Microsoft Visual Studio 2003/2005/2008/2010. Совсем недавно стала доступна интеграция в Eclipse для версии библиотеки 4.х.х.

Разработчики на Java могут использовать Qt с помощью фреймворка Qt Jambi от того же производителя (официально с 2009 года Qt Software прекратила разработку этого фреймворка).

 

«+»

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

 

Среда разработки

Qt Creator — кроссплатформенная свободная IDE для разработки на С, С++ и QML. Разработана Trolltech (Nokia) для работы с фреймворком Qt. Включает в себя графический интерфейс отладчика и визуальные средства разработки интерфейса как с использованием QtWidgets, так и QML. Поддерживаемые компиляторы: Gcc, Clang, MinGW, MSVC, Linux ICC, GCCE, RVCT, WINSCW.

Основная задача Qt Creator — упростить разработку приложения с помощью фреймворка Qt на разных платформах. Поэтому среди возможностей, присущих любой среде разработки, есть и специфичные, такие как отладка приложений на QML и отображение в отладчике данных из контейнеров Qt, встроенный дизайнер интерфейсов как на QML, так и на QtWidgets.

Работа в Qt Creator

В Qt Creator есть удобный «мастер» для создания новых проектов, форм, файлов с классами и так далее. Хотя вместо создания ui-файла для главного окна можно было бы вставлять в проект какой-нибудь простой код, не касаясь вотчины визуального программирования. После создания или открытия проекта перед нами предстает сама среда разработки. Поначалу она выглядит непривычно. Например, нет знаменитых табов (вкладок с корешками). Вернее, они есть для всего кроме файлов редактора. Сами же файлы доступны из двух списков: файлов проекта (по умолчанию на панели слева) и уже открытых файлов (в верхней строке панели редактора). Почему же принято решение отказаться от вкладок? Думаю, что ради экономии места на экране.

Еще один непривычный момент довольно относителен, поскольку интерфейс «без диалогов» давно взят на вооружение некоторыми другими программами (например, редактором TEA). В Qt Creator для поиска и замены по тексту появляются поля ввода, при наборе текста в которых найденные совпадения сразу подсвечиваются в редакторе. Для поиска дальше есть F3, а для замены — отдельное поле ввода. Рядом расположены и опции. Благодаря всему этому подобные операции проводятся быстро и удобно. То же касается информационных и отладочных панелей: никакой модальности, лишних окон, перекрывающих основное, и прочих прелестей былого подхода к архитектуре интерфейса. Всё в одном главном окне!

В Qt Creator позаботились и о редакторе кода. Подсветкой синтаксиса нынче мало кого можно удивить, поэтому сразу перейдем к другим полезным возможностям. Например, есть «полный парсер кода» — это возможность редактора проверять код на правильность с точки зрения языка программирования. Когда вы набираете код, то еще до компиляции видите, где допустили синтаксическую ошибку. В большинстве случаев срабатывает, хотя бывают и исключения. Замечательно работает автоматическое дополнение: набрали имя экземпляра класса, поставили точку или «->» — и получаете выпадающий список с членами класса. Есть свёртывание блоков кода — так называемый «фолдинг». Впрочем, я считаю, что код более нагляден без него, поэтому никогда такой возможностью не пользуюсь.

Хорошо сделано перемещение по коду — причем без внешнего ctags. Достаточно поставить курсор на имя функции или переменной и нажать F2, после чего редактор переносит в место объявления. Shift-F2 — переключает между объявлением и кодом, а F4 — просто переключает заголовок и cpp-файл. Если поднести указатель мыши к имени вызываемой в коде функции, то появится подсказка по ее параметрам.

Справочная система работает следующим образом. Допустим, у вас в коде где-то есть переменная типа QMenu. Если поставить на нее курсор и нажать F1, возникает справочная панель с описанием класса QMenu. Также в главном окне существует вкладка Help, где доступна вся документации по Qt.

Итак, большую часть времени вы будете проводить на вкладке редактора. Не совсем понятно, для чего в настройках Qt Creator есть целых пять разделов как бы для разных редакторов — по умолчанию, для скриптов, для С++, для проектов и Perforce (коммерческая система контроля над версиями). Настройки редактора С++ — это и есть настройки редактора кода вашей Qt-программы. Замечу, что в самых свежих «снэпшотах» Qt Creator настройки шрифта всё же упорядочены в единственный раздел, чего и следовало ожидать.

Полезно заняться настройкой подсветки и шрифтов, поскольку по умолчанию работать не очень удобно. Во-первых, размер шрифта слишком мелкий, а во-вторых, блоки кода, заключенные в #ifdef / #endif, трактуются парсером как «disabled code» (выражение из настроек Qt Creator) и раскрашиваются серым цветом — разбирать написанное не очень удобно. Если вам не нравится «фолдинг», там же в настройках редактора отключите Display Folding Markers.

 

На полях редактора можно ставить закладки и точки останова. Сама панель редактора может быть разделена на бесконечное множество вложенных панелей — подобно Konqueror. Таким образом на экране одновременно можно редактировать либо несколько файлов, либо один и тот же документ, но в разных местах. Для этого надо сначала разделить панель редактора (например, через Window — Split Top/Bottom), а затем выбрать пункт меню Window — Duplicate document. Такой подход иногда бывает полезнее, чем утомительные переходы по закладкам.

Архитектура Qt Creator зиждется на плагинах. Редактор — плагин, движок закладок — плагин, панель с файлами проекта — тоже плагин, и так далее. Список установленных плагинов можно посмотреть в меню Help — About Plugins. Вероятно, в будущем можно будет устанавливать дополнительные плагины, но покамест механизма для этого я не обнаружил, равно как и самих дополнительных плагинов. Зато в самих сборках новые плагины появляются с небывалой скоростью. Только за месяц появились модули поддержки Subversion и Git. Qt Creator вообще сейчас присуща скоротечность. Пункты меню Qt Creator от версии к версии переименовываются и переносятся в другие подменю. Не говоря уже о том, что постоянно рождаются дополнительные функции.

Уделим некоторое внимание окну настроек, которых, благо, много. Можно настраивать сочетания клавиш и, более того, импортировать / экспортировать их с помощью внешних файлов. Это удобно для переноса любимых сочетаний клавиш с машины на машину. В состав Qt Creator по умолчанию входят два таких предустановленных файла: для MS Visual C++ и Xcode. Всё, что связано с автоматическим дополнением, отступами, подсветкой синтаксиса и прочим, находится в настройках редактора — Text Editor.

Другое интересное средство в Qt Creator — это Locator (в старых версиях — Quick find). Для того, чтобы переместить в него фокус, достаточно нажать на Ctrl-K. Выглядит как обычная строка поиска, а служит для быстрого поиска чего угодно в чём изволите. Если говорить конкретнее — ищет файлы, в файлах, классы, функции. Поддерживает символы-модификаторы для уточнения задачи поиска. Например, вы хотите найти в документации Qt описание глобального указателя qApp. Что делать? Раньше приходилось открывать документацию через браузер и искать там. Но в Qt Creator, когда всегда под рукой Locator, достаточно набрать в строке поиска ? qapp и нажать Enter. Перейти на строку под номером 100? Пожалуйста — набираете номер и снова Enter.

И напоследок, вернемся к взаимодействию с отладчиком GDB. Qt Creator через свой графический интерфейс позволяет отлаживать не только текущий проект, но и любую внешнюю программу — конечно, если она собрана с отладочной информацией. При отладке данные различного рода отображаются в отдельных вкладках: нити, переменные, точки останова и дизассемблер. Особенно наглядно выглядит в отладчике экземпляр QStringList — видны все его элементы. Стандартный вывод самого GDB по умолчанию выключен, равно как и некоторые другие вкладки вроде сведений о содержимом регистров процессора. Если программа по какой-то причине «вылетает», то по данным в отладочной панели сразу видно, в каком именно месте кода произошел сбой.

Пример 1

Наша первая программа будет с графическим интерфейсом пользователя(GUI — Graphical User Interface).

#include <QApplication>

#include <QPushButton>

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

{

QApplication app(argc, argv);

QPushButton *newbtn = new QPushButton(QObject::tr("OK"));

QObject::connect(newbtn, SIGNAL(clicked()), &app, SLOT(quit()));

newbtn->resize(180,40);

newbtn->show();

return app.exec();

}

Первые две строки — определения классов Qt.

Эти классы относится к интерфейсу прикладного программирования (API — Application Programming Interface) библиотеки Qt. В библиотеке есть файлы с такими же названиями, описывающие данный классы.

В строке 6 создается объект QApplication. Данный класс управляет всеми ресурсами приложения. Затем создается объект класса QPushButton(кнопка) с надписью "OK".

Кнопка является виджетом. Строка 8 служит для связывания сигнала clicked() кнопки со слотом quit() объекта QApplication3. В строке 9 мы устанавливаем размер виджета и в строке 10 отображаем его. Строка 11 служит для передачи управления приложением Qt. В этом месте программа переходит в цикл обрабоки пользовательских и системных событий.

Пример 2. Проверка вводимых пользователем данных

Когда пользователю предлагается ввести какие-либо данные в текстовое поле, то довольно часто можно получить что-то абсолютно неожиданное. Пользователь может ввести числа прописью, использовать неверный десятичный разделитель или забыть указать код города в телефонном номере. Таким образом, в большинстве случаев, необходимо проверять правильность(допустимость)1 указанной информации.

Qt содержит класс QValidator, гарантирующий корректность введенных данных. Данных класс не может быть использован напрямую. Для проверки данных придется либо воспользоваться готовыми подклассами QIntValidator, QDoubleValidator, QRegExpValidator, либо написать подкласс самим.

В метод validate(QString & input, int & pos) передается строка для проверки и позиция курсора. Метод может возвращать следующие значения:

QValidator::Invalid — строка недопустима.

QValidator::Acceptable — строка допустима.

QValidator::Intermediate — строка не может быть принята в текущем состоянии, но она может стать допустимой.

Составим программу, которая будет проверять, является ли строка вещественным числом. Воспользуемся готовым классом QDoubleValidator:

Составим программу, которая будет проверять, является ли строка вещественным числом. Воспользуемся готовым классом QDoubleValidator:

MainWindow::MainWindow()

{

grid = new QGridLayout; doubleedit = new QLineEdit;

lbdouble = new QLabel(tr("Double:"));

lbresult = new QLabel(tr("Result:"));

result = new QLabel;

vld = new QDoubleValidator(-5, 2999, 5, this);

vld->setNotation(QDoubleValidator::ScientificNotation);

doubleedit->setValidator(vld);

grid->addWidget(lbdouble, 0, 0);

grid->addWidget(doubleedit, 0, 1);

grid->addWidget(lbresult, 1, 0); grid->addWidget(result, 1, 1);

resize(160, 120); setLayout(grid); ...

}

Конструктор класса QDoubleValidator может принимать следущие параметры:

QDoubleValidator::QDoubleValidator ( double bottom, double top, int decimals, QObject * parent )

Диапазон вещественных чисел от bottom до top включительно. decimals — количество знаков после десятичного разделителя2.

Используя метод setNotation(Notation) класса QDoubleValidator можно установить допустимость научной нотации:

QDoubleValidator::StandardNotation — стандартная нотация(Например: 1,124 или -2).

QDoubleValidator::ScientificNotation — научная нотация, т.е. число может иметь экспоненциальную часть(Например: 2,7E-3 или 3,3E+2)

Для проверки допустимости введенных данных воспользуемся методом validate():

MainWindow::MainWindow()

{

...

QObject::connect(doubleedit, SIGNAL(textChanged (const QString &)), this, SLOT(showresult(const QString &)));

}

void MainWindow::showresult(const QString &text)

{

int pos = 0;

QString numtext = text;

if (vld->validate(numtext, pos) == 0) result->setText(tr("invalid"));

if (vld->validate(numtext, pos) == 1) result->setText(tr("Intermediate"));

if (vld->validate(numtext, pos) == 2) result->setText(tr("Acceptable"));

}

 

Код программы

main.cpp

#include <QtGui>

 

#include "mainwindow.h"

 

int main(int argv, char **args)

{

QApplication app(argv, args);

MainWindow window;

window.show();

return app.exec();

}

 

Mainwindiw.h #ifndef MAINWINDOW_H#define MAINWINDOW_H #include <QtGui> class MainWindow : public QWidget{ Q_OBJECT public: MainWindow(); private slots: void showresult(const QString &); private: QGridLayout *grid; QLineEdit *doubleedit; QLabel *lbdouble, *lbresult, *result; QDoubleValidator *vld;}; #endif Mainwindow.cpp #include <QtGui> #include "mainwindow.h" MainWindow::MainWindow(){ grid = new QGridLayout; doubleedit = new QLineEdit; lbdouble = new QLabel(tr("Double:")); lbresult = new QLabel(tr("Result:")); result = new QLabel; vld = new QDoubleValidator(-5, 2999, 5, this); vld->setNotation(QDoubleValidator::ScientificNotation); doubleedit->setValidator(vld); grid->addWidget(lbdouble, 0, 0); grid->addWidget(doubleedit, 0, 1); grid->addWidget(lbresult, 1, 0); grid->addWidget(result, 1, 1); resize(160, 120); setLayout(grid); QObject::connect(doubleedit, SIGNAL(textChanged (const QString &)), this, SLOT(showresult(const QString &)));} void MainWindow::showresult(const QString &text){ int pos = 0; QString numtext = text; if (vld->validate(numtext, pos) == 0) result->setText(tr("invalid")); if (vld->validate(numtext, pos) == 1) result->setText(tr("Intermediate")); if (vld->validate(numtext, pos) == 2) result->setText(tr("Acceptable"));}

 

 

Пример 3. 2D графика

С помощью класса QPainter мы можем рисовать на любом объекте, унаследованном от класса QPaintDevice(QWidget, QPrinter, QImage, QGLFramebufferObject и др.). Можно рисовать геометрические фигуры, пиксельные карты, текст. Для начала рассмотрим классы, которые могут быть полезны при работе с QPainter.

Классы QPoint и QPointF служат для задания положения точки в двухмерной системе координат. QPoint — для целых чисел и QPointF — для вещественных. К точкам применимы операции сложения, вычитания, умножения, деления:

QPoint point(5, 5);

QPoint point2(10, 10);

point+= point2;

point*= 2;

Также точки можно сравнивать между собой и на равенство их координат нулю.

QPoint point(5, 10);

QPoint point2(5, 10);

if (point == point2)

{...}

bool bln;

bln = point.isNull();

Классы QSize и QSizeF служат для хранения размера. Кроме методов, аналогичных методам классов QPoint и QPointF, данные классы обладают методом scale(), позволяющим масштабировать графический объект.

Классы QRect и QRectF служат для хранения прямоугольных областей(координат верхнего левого угла и размера):

QRectF(QPointF point, QSizeF size);

Классы QLine и QLineF описывают прямую линию. Классы QPolygon и QPolygonF описывают замкнутую фигуру, образованную прямыми линиями.

C помощью класса QColor можно хранить информацию о цвете. Среда Qt поддерживает 3 цветовые модели: RGB, CMYK и HSV. Для цветовой модели RGB существует структура QRgb. Существует несколько способов задания цвета в объекте класса QColor:

Передача параметров в конструктор

unsigned int red = 50;

unsigned int green = 100;

unsigned int blue = 0;

unsigned int alpha = 128;

QColor mycolor(red, green, blue, alpha);

QRgb rgb1 = (50, 100, 0);

QColor mycolor2(rgb1);

С помощью методов QColor::setRgb(), QColor::setRgba(), QColor::setRgbF(), QColor::setHsv(), QColor::setHsvF(), QColor::setCmyk(), QColor::setCmykF()

QColor mycolor;

mycolor.setHsv(200, 100, 50);

Существует возможность установить цвет в одной модели и считать в другой:

unsigned int h, s, v;

QColor mycolor(100, 100, 100);

mycolor.getHsv(&h, &s, &v);

 

Вернемся к классу QPainter. Для того, чтобы начать рисовать нам достаточно создать объект класса QPainter и передать ему указатель на объект для рисования:

void Wnd::paintEvent(QPaintEvent *event)

{

QLineF line(10.0, 80.0, 90.0, 20.0);

QPainter pnt(this);

pnt.drawLine(line);

...

}

или

void Wnd::paintEvent(QPaintEvent *event)

{

QLineF line(10.0, 80.0, 90.0, 20.0);

QPainter pnt;

pnt.begin(this);

pnt.drawLine(line);

...

}

 

 

Метод QWidget::paintEvent() вызывается для виджетов, которые должны быть перерисованы.

В большинстве случаев рисование производится одним объектом QPainter на нескольких объектах рисования. Для сохранения старых настроек рисования(при переходе на новый объект) можно воспользоваться методами QPainter::save() и QPainter::restore(). QPainter::save() помещает в стек установки, а QPainter::restore() — извлекает.

Для рисования контуров фигуры необходимо передать объекту класса QPainter объект класса QPen(перо) с помощью QPainter::setPen().

С помощью соответствующих методов можно установить стиль пера(цвет, толщину, вид концов линии).

Для заполнения замкнутых контуров используется кисть т.е. объект класса QBrush. По аналогии с классом QPen кисть устанавливается методом QPainter::setBrush(). В него можно передать либо объект QBrush, либо один из предопределенных стилей BrushStyle:

QPainter pnt(this);

pnt.setBrush(QBrush(Qt::blue, Qt::VerPattern)); // голубая кисть с вертикальной штриховкой

 

Класс QPainter позволяет поворачивать, масштабировать, смещать объекты, делать скос. Для этих операций имеются соответствующие методы: rotate(), scale(), translate(), sheap().

Библиотека Qt поддерживает технику сглаживания(Anti-Aliasing, антиалиасинг):

QPainter pnt;

pnt.setRenderHint(QPainter::antialiasing, true);

Поможем в написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой
<== предыдущая лекция | следующая лекция ==>
Основні показники ефективності використання трудових ресурсів по групам | Сигналы и слоты

Дата добавления: 2014-01-05; Просмотров: 3962; Нарушение авторских прав?;


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



ПОИСК ПО САЙТУ:


Читайте также:
studopedia.su - Студопедия (2013 - 2022) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.157 сек.