Программа Qt

/ Comments off

Обзор программы по автоматизации производственной деятельности 1С: Предприятие. Qt — это кросс. Современных операционных систем путём простой компиляции программы. Qt Creator (ранее известная под кодовым названием Greenhouse) — кроссплатформенная свободная IDE.

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

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

Интерфейс на русском языке.

1 Московский государственный технический университет имени Н.Э. Баумана Факультет Информатика и системы управления Кафедра Компьютерные системы и сети «УТВЕРЖДАЮ» ЗАВЕДУЮЩИЙ КАФЕДРОЙ ИУ-6 Сюзев В.В.

Иванова СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ИНТЕРФЕЙСОВ В ПРОГРАММАХ НА С С ИСПОЛЬЗОВАНИЕМ БИБЛИОТЕКИ QT Учебное пособие по дисциплинам «Объектно-ориентированное программирование», «Системное программное обеспечение» МОСКВА 2011 2 АННОТАЦИЯ Учебное пособие содержит описание средств создания графических оконных пользовательских интерфейсов к программам, написанным на языке С. Под Windows при программировании в ранних версиях среды Microsoft Visual Studio для этой цели традиционно использовалась библиотека MFC. Однако эта библиотека была изначально рассчитана не на объектное, а на структурное программирование, и, соответственно, ее применение при объектном программировании излишне трудоемко, а используемые абстракции воспринимаются, как искусственные. Библиотека Qt фирмы Nokia лишена этого недостатка, кроме того она является многоплатформенной и, помимо Windows, поддерживает Linux, Mac OS X, Solaris, AIX, Irix и другие клоны Unix с X11, что очень важно при современном состоянии программирования в этих операционных системах. Пособие предназначено для студентов 1 курса кафедры «Компьютерные системы и сети» (ИУ6) и студентов, обучающихся по аналогичной программе на Аэрокосмическом факультете университета (АК5), которые изучают С в качестве второго языка программирования и уже знакомы со структурой библиотеки VCL.

Однако пособие может быть полезно и студентам других, изучающим С в качестве первого языка программирования или самостоятельно. При первом знакомстве с материалом разделы, отмеченные звездочкой, целесообразно опустить. 3 Оглавление Глава 1 Основы создания приложений с использованием классов библиотеки Qt Структура простейшей программы с Qt интерфейсом Создание интерфейса из совокупности объектов библиотечных классов Разработка собственного класса окна приложения Создание русскоязычного интерфейса в Qt Особенности компиляции-сборки программ, использующих библиотеку Qt Сборка приложений в командном режиме Сборка Qt-программ в среде Microsoft Visual Studio Qt Designer.

Быстрая разработка прототипов интерфейсов Интегрированная среда разработки Qt Creator Информационная поддержка библиотеки Qt Assistant Глава 2 Средства библиотеки Qt Виджеты и их свойства Управление расположением виджетов в окне Механизм слотов и сигналов Создание новых слотов и установка связи сигналов со слотами Генерация новых сигналов Обработка событий. События таймера Литература Приложение А.

Установка Qt на компьютер. 4 Введение Qt это библиотека классов C и набор инструментального программного обеспечения, предназначенные для построения многоплатформенных приложений с графическим интерфейсом. Она позволяет создавать приложения, которые могут работать под управлением Windows 95/98/Me/2000/XP/Vista/Windows 7, Mac OS X, Linux, Solaris, HP- UX и других версий Unix. В состав библиотеки классов Qt входят: классы, обеспечивающие построение оконного графического интерфейса пользователя; классы для работы с 2-х и 3-х мерной графикой; классы, реализующие поддержку основных графических форматов хранения изображений; классы-шаблоны динамических массивов и других структурных типов данных; классы для работы с процессами и потоками; классы для работы с XML и пр. Краткая история создания библиотеки. Работа над библиотекой была начата Хаавардом Нордом (главный управляющий Trolltech) и Эриком Чамбенгом (президент компании Trolltech) в 1990 г. К 1993 году они завершили разработку первого графического ядра и приступили к созданию визуальных компонентов виджетов (widgets).

4 марта 1994 года ими была зарегистрирована компания под названием 'Quasar Technologies', которое затем было преобразовано в 'Troll Tech', а затем и в 'Trolltech'. Первый выход в свет библиотеки Qt состоялся в мае 1995 года. Qt тогда могла работать как под управлением Windows, так и под управлением Unix, предоставляя разработчикам единый API (Прикладной Интерфейс).

Библиотека была выпущена под двумя лицензиями: коммерческой для разработки коммерческого программного обеспечения и свободной для разработки программ с открытым исходным кодом. Завоевание рынка происходило медленно, но количество приверженцев библиотеки неуклонно росло. Из года в год компания ежегодно удваивала количество продаж. Успех обеспечивался высоким качеством библиотеки, стройной, хорошо продуманной структурой компонентов и простотой их применения. Менее чем за десятилетие Qt превратилась из малоизвестной библиотеки в программный продукт, используемый тысячами и тысячами разработчиков во всем мире. Наиболее известными примерами разработки на Qt являются: программа-коммуникатор Skype, медиа-плеер VLC, Google Earth. В настоящее время фирма Trolltech влилась в хорошо известную на рынке фирму Nokia, которой теперь и принадлежит библиотека Qt.

В связи с этим библиотека может использоваться для создания приложений под операционную систему мобильных телефонов Nokia Symbian и Windows Mobile. 5 ГЛАВА 1 ОСНОВЫ СОЗДАНИЯ ПРИЛОЖЕНИЙ С ИСПОЛЬЗОВА- НИЕМ КЛАССОВ БИБЛИОТЕКИ QT Значительная часть классов библиотеки Qt использует отсутствующие в языке С средства, реализация которых требует применения дополнительного препроцессора мета-объектного компилятора (MOC). Следовательно, прежде, чем программа, использующая классы Qt, будет передана препроцессору и компилятору языка С, ее должен обработать MOC. Разработчики библиотеки предусматривают несколько технологий создания программ с использованием библиотеки классов Qt. 11 Рисунок 1.5 Интерфейс на русском языке Примечание.

Программа

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

Реализацию механизмов библиотеки Qt, отсутствующих в С, обеспечивает специализированный препроцессор Qt Meta-object Compiler Мета-объектный компилятор (MOC). Этот препроцессор обрабатывает исходный текст программы, подставляя вместо специальных макросов Qt реализацию заказанных свойств на С (см. Рисунок 1.6).

#include.h Описание класса потомка QWidget #include MOCompiler moc.cpp Реализация используемых механизмов Qt #include.cpp Реализация класса потомка QWidget.cpp Основная программа С Compiler.obj.obj.obj Двоичные Основная Основная тексты программа программа частей программы Компоновщик.exe Приложение Рисунок 1.6 Схема сборки приложения при наличии в нем макросов Qt Как следует из схемы, MOC обрабатывает только заголовочные файлы, содержащие описание классов, наследуемых от классов Qt. В результате работы МОС в описание объявляемых классов включаются вспомогательные методы классов Qt. Реализация этих методов помещается в файл moс.cpp, который подключается к проекту по- 12 средством автоматически добавляемого #include. Тексты основных методов в файле реализации класса при этом не затрагивается. После выполнения MOC на выходе получается исходный текст программы на «чистом» С. Окончательная компиляция и сборка программы используемым компилятором C и компоновщиком, доступными в рамках платформы, где осуществляется компиляция-сборка Сборка приложений в командном режиме Разработка приложений на многих платформах (таких как Linux, Solaris, HP-UX и др.) часто выполняется без специализированных сред непосредственно в командном режиме.

При этом текстовые модули программы создаются в простейших текстовых редакторах типа Блокнота, а компиляция, сборка и отладка программ осуществляется командами вызова соответствующих программ: компилятора, компоновщика и (при наличии) отладчика. С таким режимом работы целесообразно познакомиться и в Windows. Помимо cpp- и h-файлов с текстом программы для создания приложения необходим файл проекта, который должен содержать сведения о компиляции и сборке программы. Операции по созданию файла проекта, а также его компиляции-сборки в соответствии с названием раздела выполним в командном (консольном) режиме. Для работы в командном режиме необходимо, чтобы переменные окружения, указывающие местоположение используемых пакетов и тип компилятора, который будет использован при сборке Qt-проектов, были правильно определены.

В Windows для правильного определения переменных окружения следует войти в консольный режим через команду, предусмотренную при установке Qt в меню Пуск операционной системы: Пуск Qt by Nokia v4.6.2 (VS2008 OpenSource) Qt Command Prompt. После этого, чтобы облегчить работу в консольном режиме целесообразно вызвать файловый менеджер Far (или другой, например WinCommander). При этом понадобится указать полный путь к приложению. Так если менеджер Far установлен в папке Program Files на диске C, то команда должна выглядеть так: C: Program Files Far Far.exe Кавычки необходимы, поскольку имя каталога Program Files состоит из двух слов. Затем следует объявить текущей ту папку, в которой находятся cpp- и h- файлы программы. Для этого переходим в нее посредством Far или вводим команду изменения директории cd. Последовательность действий по компиляции-сборке приложения выглядит следующим образом.

Создание файла-проекта приложения. Для создания файла-проекта, включающего файлы текущей (!) директории, используют специальную консольную программу Qt qmake, которой в качестве опции передается параметр -project: qmake -project Если имя папки, в которой находится программа, Hello, то в результате работы qmake в текущей папке появится файл проекта Hello.pro, со следующим содержимым: TEMPLATE = app # тип исполняемого файла.exe TARGET = # имя исполняемого файла по умолчанию DEPENDPATH +=.

# дополнительные пути разрешения ссылок не заданы INCLUDEPATH +=. # дополнительные пути поиска файлов не заданы # Input # комментарий исходные файлы 13 HEADERS += win.h SOURCES += main.cpp win.cpp Содержимое файла-проекта определяет параметры процесса компиляции-сборки исполняемого файла из исходных файлов проекта и может включать переменные, перечисленные в таблице 1.1. Таблица 1.1 Переменные файла проекта Переменная TEMPLATE TARGET DESTDIR CONFIG QT HEADERS SOURCES FORMS RESOURCES DEFFILE RCFILE Оглавление Шаблон, используемый в проекте. Он определяет, что будет на выходе процесса сборки: приложение, библиотека или подключаемый модуль.

Имя результата сборки: приложения, библиотеки или модуля. По умолчанию совпадает с именем каталога. Каталог, в который будет помещен исполняемый или бинарный файл, полученный в результате сборки. По умолчанию зависит от параметра CONFIG: CONFIG=debug результат помещается в подкаталог debug текущего каталога, CONFIG=release результат помещается в подкаталог release текущего каталога. Общие параметры настройки проекта, например создать отладочный (debug) или конечный (realease) варианты приложения. По умолчанию создается отладочный вариант приложения. Qt-ориентированные параметры конфигурации, например указывающие на использование классов графического интерфейса пользователя (Graphics User Interface GUI) или на использование средств OpenGL OPENGL.

Список заголовочных файлов (.h), используемых при сборке проекта. Список файлов с исходным кодом (.cpp), которые используются при сборке проекта. Список файлов форм, полученных с использованием Qt Designer (.ui). Список файлов ресурсов (.rc), которые включаются в конечный проект (пиктограммы, картинки и т.п.). Файл.def, который линкуется вместе с приложением (только для Windows).

Файл ресурса для приложения (только для Windows). В простейших случаях автоматически полученный файл проекта можно использовать при отладке приложения. Однако если при проектировании интерфейса были использованы макросы Qt, например QOBJECT, то в файл проекта необходимо добавить: QT += gui # используемые средства Qt: графический интерфейс Если же необходимо создать итоговый вариант реализации, файл проекта надо отредактировать так: TEMPLATE = app # тип исполняемого файла.exe TARGET = Hello # имя исполняемого файла Hello QT += gui # используемые средства Qt: графический интерфейс CONFIG += release # создание итогового варианта реализации # Input # комментарий исходные файлы HEADERS += win.h SOURCES += main.cpp win.cpp 2. Создание файла управления компиляцией-сборкой. После создания и редактирования файла проекта Hello.pro повторно вызываем процедуру qmake, передавая ей в качестве параметра имя файла проекта: qmake Hello.pro 14 Теперь qmake на базе файла проекта формирует файл Makefile, определяющий фактический порядок компиляции-сборки программы, местоположение компилятора и необходимых библиотек. Если все прошло нормально, то в текущей директории появится файл Makefile, два подкаталога debug и release и несколько вспомогательных файлов.

Компиляция-сборка приложения. Не меняя текущей директории, вводим команду вызова процедуры компиляции-сборки make: nmake если используется компилятор-компоновщик Microsoft Visual C; mingw32-make для вызова компилятора mingw. При этом в обоих случаях надо быть уверенным, что путь к папке bin, содержащей используемую программу, в системе установлен. При необходимости путь можно добавить к предусмотренным в системе, например так: set PATH =C: Program Files Microsoft Visual Studio 9.0 VC bin;%path% Результат сборки программы приложение Hello.exe и промежуточные файлы процесса компиляции/сборки, которые в зависимости от задания будут добавлены в каталог debug или release. Выполнение программы. Запускаем программу Hello.exe и на экране получаем окно приложения.

При щелчке мышкой по кнопке Close или Выход приложение завершает работу. В процессе работы приложению Qt необходимы динамические библиотеки QtCore4.dll и QtGui4.dll, которые должны быть доступны в путях автовызова, устанавливаемых системной переменной Path, или могут быть скопированы в директорию приложения Hello debug Сборка Qt-программ в среде Microsoft Visual Studio В качестве альтернативы компиляции-сборке приложений Qt в командном режиме можно предложить создание приложений с использованием среды Microsoft Visual Studio 2008 и выше. Для этого необходимо скачать и установить на компьютер специальный дистрибутив библиотеку для Visual Studio и плагин для среды (см. Приложение А).

После установки плагина Qt в Visual Studio при создании приложений становятся доступны шаблоны приложений Qt: Qt Application, Qt4 Designer Plugin, Qt Library и т.д. Однако практика показывает, что на начальном этапе обучения создавать заготовку проекта удобнее в консольном режиме Qt (см. Раздел 1.2.1).

При этом следует создать каталог будущего проекта (имя каталога будет совпадать с именем проекта!) и в этот каталог поместить хотя бы пустые заготовки будущих исходных файлов программы с нужными именами и расширениями. Затем используя команду qmake -project создаем файл проекта и корректируем его, как указано в разделе Далее возможны два варианта действий. Устанавливаем в проекте TEMPLATE = vcapp и еще раз вызываем qmake: qmake # проект Visual Studio В результате на базе файла проекта Qt создается файл проекта Visual C, при открытии которого автоматически будет вызываться среда Microsoft Visual C с нужными путями. Загружаем Visual Studio 2008 (или более позднюю версию) с установленным плагином и открываем файл проекта, используя команду меню Qt Open Qt Project File (.pro) Всю дальнейшую работу по созданию, компиляции, сборке и отладке Qtприложений можно выполнять в среде Visual Studio. Если плагин для Visual Studio не установлен, то для нормального подключения библиотек Qt следует вызывать Visual Studio либо через специальный консольный режим, как было описано выше, либо через команду меню Пуск: Пуск Qt by Nokia v4.6.2 (VS2008 OpenSource) Visual Studio with Qt Qt Designer. Быстрая разработка прототипов интерфейсов Qt Designer программа визуального проектирования интерфейса пользователя. Результатом работы этой программы является файл XML-описания формы, имеющий расширение.ui.ui (см.

Рисунок 1.7). Вид формы Qt Designer.ui XMLописание формы UICompiler ui.h Реализация конструктора формы setupui #include.h Описание класса потомка QWidget #include MOCompiler moc.cpp Реализация используемых механизмов Qt #include.cpp Реализация класса потомка QWidget.cpp Основная программа С Compiler.obj.obj.obj Двоичные Основная Основная тексты программа программа частей программы Компоновщик.exe Приложение Рисунок 1.7 Схема компиляции-сборки приложения с формами интерфейса, созданными в Qt Designer. 16 Файлы, созданные Qt Designer в дальнейшем дополнительно обрабатываются специальным компилятором UIC (User Interface Compiler Компилятор пользовательского интерфейса), который формирует код программы на С из его XML-описания. Результатом компиляции является файл ui.h.

Этот файл содержит описание метода setupui, использующего классы Qt и обеспечивающего создание разработанной формы. Автоматически созданный файл вместе с описанием класса формы передаются MOC для реализации необходимых дополнительных функций библиотеки Qt. После этого файлы приложения обрабатываются компилятором и компоновщиком С. В результате создается файл приложения. Помимо конструирования внешнего вида окна приложения Qt Designer позволяет: запрограммировать предусмотренные Qt (!) аспекты поведения формы и ее компонентов; связать метки (объекты класса QLabel) с другими виджетами так, что при щелчке мышкой на метке фокус ввода будет передаваться на ассоциированный виджет; определить порядок передачи фокуса ввода виджетам формы при нажатии клавиши Tab.

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

Исполняемый файл Qt Designer designer.exe может быть запущен как из консольного окна, так и непосредственно из Windows. При запуске на экране появляется главное окно приложения и перед ним диалоговое окно New Form (см. Рисунок 1.8). Рисунок 1.8 Вид конструктора форм при запуске программы. 17 В диалоговом окне предлагается выбрать шаблон для формы окна. В качестве таких шаблонов могут использоваться объекты классов QWidget, QDialog и QMainWindow.

Затем, уже в Designer выполняют проектирование интерфейса. Выполним визуальное проектирование формы интерфейса приложения Hello, рассмотренного в разделе 1.1. Приложение Hello. Создание с использованием программы визуального проектирования формы. Создание главного окна приложения.

В качестве основы формы будем использовать объект класса QWidget, как в предыдущем примере. Соответственно в ответ на запрос Designer выбираем шаблон (templates) Widget и нажимаем кнопку Create. В результате создается заготовка окна, озаглавленная Form untitled, где Form имя объекта класса QWidget по умолчанию, untitled (безымянный) означает, что файл создаваемой формы приложения пока не имеет имени. На эту форму с левой панели Widget box перетаскиваем мышкой два виджета Label и PushButton (см. Рисунок 1.9).

Рисунок 1.9 Основные панели дизайнера и добавление виджетов на форму Полученную форму сохраняем под именем form.ui. Для этого используется пункт меню File Save as Далее, используя панели Инспектора объектов (Object Inspector) и Редактора свойств (Property Editor), выбираем объекты и присваиваем им новые имена, меняя свойство objectname: QWidget: objectname = Form objectname = win; QPushButton: objectname = pushbutton objectname = button.

Также с помощью Редактора свойств меняем заголовки виджетов (свойство text). 18 label: text = ʺHello!ʺ; button: text = ʺCloseʺ. Управление расположением и размерами виджетов. Также как и при создании интерфейса вручную для управления размещением виджетов на форме Qt Designer использует компоновщики. Для добавления компоновщика компонуемые виджеты должны быть выделены, что можно сделать, щелкая мышкой по виджетам при нажатой клавиши Ctrl. Добавление компоновщиков и связывание с ними виджетов осуществляется выбором пунктов меню: Form Layout Horizontally компоновать по горизонтали, Form Layout Vertically компоновать по вертикали, Form Layout in a Grid компоновать по сетке, или нажатием соответствующих кнопок на панели компонентов дизайнера.

Обратите внимание, что связывание главного компоновщика с окном происходит, если выбрать горизонтальную или вертикальную компоновку при отсутствии выделенных виджетов. Компоновку окна приложения выполняем следующим образом: label и button компонуем по вертикали; окно приложения (при отсутствии выбранных виджетов) компонуем по горизонтали. После настройки виджетов и выполнения компоновки получаем готовую форму (рисунок 1.10), окончательный вариант которой не забываем сохранить, используя пункт меню File/Save. Рисунок 1.10 Вид окна дизайнера после компоновки формы Связывание сигналов и слотов. Как уже говорилось выше, кроме визуального конструирование вида окон, Qt Designer позволяет связать заранее предусмотренные сигналы виджетов с такой же заранее предусмотренной реакцией других виджетов на эти сигналы. 19 Для этого необходимо переключиться в режим Сигналы и слоты, выбрав пункт меню Edit Edit Signals/Slots.

Указание виджетов, между сигналом и слотом которых устанавливается связь, выполняется визуально: щелкаем левой клавишей мышки по виджету кнопки и, не отпуская левой клавиши, переносим указатель мышки на свободное место окна (см. Рисунок 1.11). Выбранные виджеты связываются красной линией, после чего открывается окно Configure Connection, в котором выбираем слева сигнал clicked, а справа слот close. (Для того, чтобы справа появились доступные слоты необходимо внизу окна выбрать Show Signals and Slots inherited from QWidget Показать сигналы и слоты, наследованные от QWidget).

Для завершения операции необходимо нажать на кнопку OK. Рисунок 1.11 Вид окна при связывании сигнала от кнопки с закрытием окна После закрытия вспомогательного окна установленные связи на форме маркируются выбранными сигналом и слотом (см. Рисунок 1.12). Рисунок 1.12 Маркировка связей «Сигнал слот» в дизайнере Предварительный просмотр формы. Qt Designer позволяет просмотреть полученную форму. Для этого необходимо выбрать пункт меню Form Preview.

В режиме предва. 20 рительного просмотра форма выглядит и реагирует на действия пользователя так, как это будет происходить во время работы программы (см. Рисунок 1.13). Рисунок 1.13 Предварительный просмотр сконструированной формы Полученную и проверенную форму сохраняем еще раз и переходим к созданию собственно приложения. Описание класса окна. Приложение в соответствии со схемой работы Qt Designer должно включать класс окна.

Этот класс может строиться двумя способами: 1) как наследуемый от двух классов: класса, на базе объекта которого строится окно приложения, класса, описание которого получается автоматически при обработке созданного Qt Designer файла формы компилятором UIC; 2) как композиция или агрегация тех же классов. Во втором случае объект класса, наследуемого от класса Qt, включает поле автоматически созданного класса или содержит указатель на него (см.

Рисунок 1.14). QWidget Класс образа окна QWidget QWidget Класс окна Класс окна Класс образа окна Класс окна Класс образа окна a б в Рисунок 1.14 Возможные варианты подключения автоматически созданного класса образа окна: а множественное наследование; б композиция; в наполнение (агрегация) Вариант множественного наследования удобнее при написании программы, поскольку при обращении к полям и методам родительского класса не требуется дополни- 21 тельно указывать имя поля (обычного или указателя), поэтому желательно использовать именно его.

При использовании множественного наследования описание класса окна нашего приложения должно выглядеть так: #ifndef winh #define winh #include #include 'uiform.h' // заголовок сгенерированный UIC class Win: public QWidget, public Ui::win QOBJECT public: Win( QWidget. parent = 0);; #endif Класс win класс, автоматически созданный при работе Qt Designer и описанный в файле uiform.h, Ui имя адресного пространства, объявленного Qt Designer. Одним из методов этого класса является метод setupui, который обеспечивает изображение и заданную реакцию формы. 23 Qt Designer автоматически построил текст, близкий к тексту программы из раздела 1.1. Однако этот текст существенно длиннее и более сложно организован, что вызвано необходимостью предусмотреть в шаблоне различные варианты.

Так, например, для организации смены языка интерфейса в процессе работы программы все строки, которые должны быть переведены, собраны в одном специальном методе retranslateui. Избыточность кода, генерируемого Qt Designer, является причиной того, что данный пакет обычно используют для быстрого создания прототипа интерфейса, а для конечной реализации интерфейсы создают вручную с использованием классов Qt Интегрированная среда разработки Qt Creator Интегрированная среда Qt Creator обеспечивает весь процесс создания и отладки приложений в операционных системах Linux, Mac OS X и Windows. Среда включает собственный специализированный редактор. В отличие от обычного текстового редактора текстовый редактор Qt Creator предназначен для работы с исходными текстами программ, поэтому он: помогает форматировать код программы; обеспечивает режим подсказок при вводе кода; выполняет контроль ошибок; осуществляет навигацию по коду по классам, функциям и символам; предоставляет контекстно-зависимую справку по классам, функциям и символам; при переименовании учитывает области действия идентификаторов; идентифицирует место в коде, где функция была описана или вызвана.

Конструирование форм в среде можно выполнять вручную или с использованием клона программы Qt Designer. Компиляция-сборка выполняется с помощью С MinGW или Visual C в зависимости от настоек среды. Рассмотрим процесс проектирования приложений с использованием Qt Creator. При запуске среды Qt Creator на экране появляется окно Начало работы (см.

Рисунок 1.15), которое содержит ссылки на учебники и примеры. Рисунок 1.15 Вид окна Начало работы среды Qt Creator. 25 Пример 1.5. Приложение Hello. Разработка с использованием Qt Creator. Создание нового проекта. Разработка приложения начинается, как и в других средах, с создания нового проекта.

Проект создается при выборе пункта меню Файл Новый файл или проект или при нажатии на кнопку Создать проект окна Начало работы (см. Рисунок 1.14). При заказе создания проекта на экране появляются окна мастера создания проекта, на которых последовательно предлагается выбрать шаблон, местоположение, название, базовый класс окна, названия заголовочного файла и файла реализации класса и указать, предполагается ли использование Qt Designer для создания класса описания формы интерфейса, и, если да, то его имя. В соответствии с заданием мы выбираем шаблон GUI (Graphic User Interface Графический интерфейс пользователя) приложение Qt (см. Рисунок 1.17), заказываем создание окна с применением Qt Designer и подтверждаем все автоматически сгенерированные имена.

Рисунок 1.17 Первое из последовательности окон задания характеристик проекта В результате получаем заготовку проекта, которая включает следующие исходные файлы: Hello.pro файл проекта; main.cpp файл основной программы; widget.h заголовочный файл класса окна (заготовка этого файла создается автоматически); widget.cpp файл реализации класса окна; widget.ui редактируемый в Qt Designer файл описания класса образа окна. Аналогично другим средам разработки заготовку можно запускать на выполнение. При этом на экране появится пустое окно с обычным набором кнопок (см. Рисунок 1.18). Файл проекта заготовки уже настроен для работы со всеми файлами проекта: QT += core gui TARGET =. 27 Рисунок 1.19 Внешний вид окна дизайнера в среде Qt Creator Процесс создания внешнего вида формы ничем от рассмотренного в разделе не отличается.

Аналогично перетаскиваем с левой панели метку QLabel и кнопку QPushButton, затем настраиваем их параметры (имена label и button, надписи Hello! И Close соответственно).

Также устанавливаем необходимые компоновщики. Основное отличие в переключении режимов: виджеты, действия, сигналы и слоты и табуляция. Режим виджетов и корректировки порядка переключения по Tab доступны постоянно, переключение между редакторами сигналов и слотов и действий происходит при выборе закладок внизу в центральной части окна.

Для нашего функционирования нашего приложения необходимо добавить один сигнал и реакцию на него (связать сигнал с соответствующим слотом). Для этого переключаемся на вкладку редактора сигналов и слотов и нажимаем кнопку «+» над окном редактора связей. В окне появляется новая строка:. Если дважды щелкать мышкой по этим клеткам, то будут открываться выпадающие списки возможных вариантов. Выбираем нужные элементы и получаем: button clicked Widget close. При запуске программы на экране появляется главное окно приложения (см.

Рисунок 1.20), которое работает с соответствии с заданием. 28 Рисунок 1.20 Вид приложения, созданного в среде Qt Creator 1.3 Информационная поддержка библиотеки Qt Assistant Разработка программ с использованием средств Qt существенно облегчается наличием в системе справочной системы по всем средствам, механизмам и классам Qt.

Справочная система существует в виде отдельного приложения Qt Assistant (файл Assistant.exe), которое также интегрировано в среду программирования Qt Creator. При вызове приложения Qt Assistant на экране появляется главное окно справочной системы (см. Рисунок 1.21).

Рисунок 1.21 Вид главного окна справочной системы Qt Справочная система предоставляет возможность навигации по разделам, по индексному указателю, а также поиск классов и/или методов по именам, по контексту во всех 29 статьях документации. Документация предоставляет несколько вариантов группировки классов и функций библиотеки, что позволяет быстро найти классы для работы, например с сигналами и слотами, с графикой, классы контейнеры и пр. Описание Qt содержит большое количество примеров. Частично документация переведена на русский язык.

Русскоязычный вариант справочной системы можно взять на сайте и добавить в справочную систему согласно инструкции разработчиков. 33 Пример 2.1. Управление размером окна посредством изменения геометрических свойств корневого виджета.

34 Однако на рисунке 2.1, б видно, что попытка уменьшения размера окна приводит к нарушению внешнего вида, в результате которого виджеты вообще могут исчезнуть из поля зрения. Следовательно, при ручной компоновке пришлось бы программировать, как должен изменяться внешний вид окна при изменении его размеров. В отличие от ручного варианта при компоновке с использованием менеджеров компоновки осуществляется автоматическая перестройка внешнего вида окна в зависимости от его размеров. В Qt предусмотрены следующие элементы компоновки: QVBoxLayout вертикальный компоновщик управляет расположением виджетов в окне по вертикали; QHBoxLayout горизонтальный компоновщик управляет расположением виджетов в окне по горизонтали; QGridLayout табличный компоновщик управляет расположением виджетов в направляющей двумерной сетке матрице или таблице. 35 Табличная компоновка предполагает задание координат размещения компонентов с точностью до клетки.

При этом допускается размещать виджет в нескольких клетках. Для добавления виджетов в менеджер компоновки используют специальный метод, позволяющий указать область таблицы, которую должен занимать элемент: QGridLayout::addWidget(QWidget.widget, // размещаемый виджет int fromrow, int fromcolumn, // координаты верхней левой ячейки int rowspan, int columnspan, // количество ячеек по горизонтали и // вертикали соответственно Qt::Alignment alignment=0); // спороб выравнивания Пример 2.4. Применение табличного компоновщика.

36 На рисунке 2.4 показан эффект использования пружины: размер окон редакторов и расстояние между строчными редакторами минимально независимо от размеров окна. Рисунок 2.4 Использование «пружины» для поджатия виджетов Следует иметь в виду, что управление размерами виджетов, осуществляемое менеджерами компоновки, регулируется параметрами растяжения и политиками, отдельно задаваемыми по горизонтали и вертикали 1. Вместо менеджеров компоновки, которые обычно используют политики пропорционального изменения размеров виджетов при изменении размеров форм, можно использовать разделители QSplitter, которые позволяют регулировать размеры виджетов по желанию пользователя. Разделители бывают вертикальными и горизонтальными. Их применяют в качестве объекта основы окна или его фрагмента.

Применение разделителя. #include int main(int argc, char.argv) QApplication app(argc, argv); QSplitter splitter(qt::horizontal); splitter.setwindowtitle('main Window'); QLineEdit.edit1=new QLineEdit('Edit1',&splitter); QLineEdit.edit2=new QLineEdit('Edit2',&splitter); splitter.show; return app.exec; Результат работы программы представлен на рисунке 2.5.

Линия между двумя редакторами ползунок, потянув за который можно изменить соотношение областей, отведенных по каждый редактор. Рисунок 2.5 Применение разделителя Компоновщики всех рассмотренных типов могут вкладываться один в другой в соответствии с реализуемой схемой окна.

Программа Qtv

Однако при добавлении компоновщика в контейнер другого компоновщика используется не метод addwidget, а метод addlayout, например: layout2-addlayout(layout1). Вложение различных видов компоновщиков, пружин и ползунков позволяет реализовать практически любые варианты компоновки. 37 2.3 Механизм слотов и сигналов При использовании Qt передача сообщений внутри приложения реализуется механизмом слотов и сигналов. Это наиболее важный механизм Qt, отличающий его от других библиотек интерфейсных элементов C, например «родной» библиотеки Visual C MFC.

Программа Qtv

Как уже упоминалось ранее механизм реализуется компилятором MOC, который генерирует соответствующий код на «чистом» С. По правилам Qt любой виджет может посылать сигналы другим виджетам, сообщая им об изменениях, произошедших с ним в процессе функционирования. Чаще всего причиной формирования сигнала бывают действия пользователя.

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

Посредством специального оператора Qt connect каждый сигнал может быть подключен к одному или нескольким слотам других виджетов. Тогда каждый раз при получении сигнала в виджетах-получателях будет активизироваться соответствующий обработчик сигналов слот или последовательно несколько слотов. В качестве слота может объявляться любой (перегруженный, виртуальный, общий, защищенный, закрытый) метод, который дополнительно объявлен слотом, что позволяют подключать его к сигналу. Такой метод также сохраняет возможность традиционного вызова, не связанного с сигналом. Точно так же, как один сигнал может быть подключен к нескольким слотам, к одному слоту может быть подключено несколько сигналов. В после случае приложение одинаково реагирует на разные сигналы.

Соединяемые сигналы и слоты должны иметь идентичные сигнатуры (т.е. Количество и типы входных аргументов). Исключением является случай, когда сигнал имеет большее число аргументов, чем слот. В этом случае 'лишние' аргументы просто не передаются в слот. Если типы входных аргументов не совместимы, или сигнал или слот не определены, Qt выдаст предупреждение во время выполнения программы. Точно так же Qt отреагирует, если в сигнатуры сигналов или слотов в макросе connectвключены имена аргументов Создание новых слотов и установка связи сигналов со слотами Программист, использующий Qt, имеет возможность не только использовать предопределенные сигналы и слоты, но и создавать новые.

При этом следует следить, чтобы классы, определяющие новые сигналы и слоты, обязательно включали макрос QOBJECT, обрабатываемый MOC. Приложение «Возведение числа в квадрат». Создание новых слотов.

На рисунке 2.6 представлено окно создаваемого приложения в разные моменты времени. В момент запуска приложения кнопка Следующее не активна, поскольку нажатие на нее бессмысленно. При выдаче результата эта кнопка становится доступной, но строчный редактор, используемый для ввода значения, блокируется, чтобы предотвратить изменение исходных данных и, как следствие, демонстрации на экране результата, не связанного с исходными данными. Ввод будем считать завершенным, если пользователь нажимает клавиши Enter или Tab клавиатуры или щелкает мышью вне поля ввода. При этом строчный редактор теряет фокус ввода. При вводе неправильных (например, буквенных) исходных данных приложение должно выдавать сообщение об ошибке в специальном окне.

38 Рисунок 2.6 Окно приложения: при запуске программы (а), при выдаче результата (б) Создание приложения начинаем с описания класса окна Win. Этот класс, кроме рамки, меток, строчных редакторов и кнопок должен включать: объект класса QTextCodec для русификации интерфейса; менеджеры вертикальной и горизонтальной компоновки. Поскольку в качестве сигнала завершения ввода мы собираемся использовать returnpressed сигнал нажатия клавиши Enter, кроме класса окна нам понадобится описать специальный класс валидатора StrValidator, наследуемый от класса QValidator.

Объект этого класса, включающего метод проверки вводимой строки validate, передается строчному редактору, осуществляющему ввод. При завершении ввода этот метод вызывается автоматически. Если этот метод возвращает Acceptable, то редактор ввода генерирует сигналы editingfinished завершение редактирования и returnpressed сигнал нажатия клавиши Enter. В противном случае эти сигналы не генерируются. Описываемый нами метод всегда принимает вводимую строку.

Проверка же вводимой строки будет осуществляться позднее. 41 msgbox.exec; QHBoxLayout QVBoxLayout QVBoxLayout Рисунок 2.7 Схема компоновки интерфейса приложения Основная программа данного примера помещается в файл main.cpp: #include 'win.h' int main(int argc, char.argv) QApplication app(argc, argv); Win win(0); win.show; return app.exec; Метод calc, реализующий основную обработку, проверяет правильность ввода данных и выдает окно сообщения, если данные введены неверно. При этом используется прямой вызов метода вывода окна сообщения QMessage::exec. Эту же операцию можно осуществить, создав новый сигнал, который генерируется, если обнаруживается ошибка данных Генерация новых сигналов Аналогично новым слотам новые сигналы должны быть объявлены в классе, объекты которого этот сигнал генерируют: signals: void inputerror; Сама генерация выполняется специальным оператором Qt: emit inputerror; Пример 2.8.

Приложение «Счетчик». Генерация нового сигнала. В качестве примера разработаем приложение, которое считает отдельные нажатия на кнопку и серии по пять нажатий (см. Рисунок 2.8).

42 Рисунок 2.8 Внешний вид счетчика нажатий На рисунке 2.9 приведена диаграмма взаимодействия объектов приложения в процессе работы посредством генерации и обработки сигналов (сообщения создания/уничтожения объектов и изменения их размеров в процессе компоновки не показаны, чтобы не усложнять рисунок). Таким образом оба объекта счетчиков должны уметь увеличивать свое содержимое на единицу, т.е. Включать соответствующий метод слот. А первый счетчик еще и должен генерировать сигнал по достижении пяти нажатий.

Окно приложения Кнопка '+1' Завершить Кнопка 'Выход' Счетчик 1 Счетчик 2 Рисунок 2.9 Сигналы в приложении Оба счетчика будем строить на базе одного класса Counter, наследуемого от QLineEdit. В производном классе предусмотрим соответствующие сигнал ticksignal и слот addone (см. Рисунок 2.10). 45 Рисование в простейшем варианте выполняется с помощью объекта класса QPainter. Объект этого класса получает доступ к фрагменту экрана, отведенному под окно, в котором выполняется рисование. Само рисование программируют в обработчике события перерисовки paintevent, тогда каждый раз при перерисовке окна (например, когда окно появляется из-за других окон) рисунок возобновляется. Кроме того, при использовании этого события необходимость в стирании рисунка отпадает.

Вместо этого следует обеспечить перерисовку окна при изменении положения фигур. Такую перерисовку обеспечивают методы QWidget update и repaint.

Использование update предпочтительно, так как метод сам определяет целесообразность немедленной перерисовки, приспосабливаясь к скорости изменения рисунка (при слишком большой частоте перерисовки она будет выполняться не каждый раз). При создании движущегося изображения сигнал на перерисовку смещенного изображения целесообразно получать от таймера.

Приложение, использующее средства Qt, может создавать произвольное количество таймеров с разными временными интервалами. Для этого используется функция класса QObject: int starttimer. Число, возвращаемое функцией номер таймера.

Этот номер необходимо проверить, когда активизируется событие timerevent, чтобы быть уверенным, что обрабатывается сигнал от нужного таймера. Для прекращения работы таймера используют функцию того же класса. Void killtimer Пример 2.9. Создание движущихся изображений.

Программа Qtv Смотреть Онлайн

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

Рисунок 2.11). Рисунок 2.11 Внешний вид окна приложения Приложение будет состоять из 6 объектов: Окно, Кнопка, Холст, Таймер, Линия и Квадрат, не считая объекта самого приложения (см. Рисунок 2.12).

Программа Qtox

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