Windows. Вирусы. Ноутбуки. Интернет. Office. Утилиты. Драйверы

Вводная часть: Qt – это не только элементы графического интерфейса. Этот фреймворк представляет собой взаимосвязанную систему. Родственность Qt-объектов осуществляется через наследование класса QObject. А связи между ними через сигнально-слотовую систему.В этой статье будут описаны основные классы и полезные особенности этой библиотеки. QObject Это базовый класс для всех объектов Qt. Его наследует любой класс использующий сигналы и слоты. Он обеспечивает возможность соединения объектов друг с другом. А также предоставляет к этому полезную функциональность. Во введение этого …

Первая программа на Qt:

Первая программа на Qt: Qt – это мощный инструментарий, имеющий множество способов для воплощения задумок программиста в жизнь. Давайте начнём его освоение с самой первой программы Итак, у вас под рукой имеется среда разработки QtCreator с подключенным к ней компилятором(например MinGW). В среде разработки выбираем Другой проект-> Проект с поддиректориями. Название: cppstudio. Здесь для удобства мы будем хранить все приложения взятые с сайта. Создадим здесь под проект QWidget с название lesson_1 и удаляем в нём файлы mainwindows.h, mainwindows.cpp, …

Введение — графическая библиотека Qt

Qt – свободная широко распространённая графическая библиотека C++. Она содержит множество компонентов для поддержки не только графики, но и сети, базы данных и т.д. Общая информация: С начала использования программист получает взаимосвязанный фреймворк. Это даёт возможность при написании большей части программы использовать только встроенные классы и практически полностью отказаться от связи с определённой ОС. Такой подход реализует независимость и свободу разработчика. (Отсутствует необходимость переписывать программу под несколько операционных систем. Алгоритм для Windows может, скомпилирован в …

После суток жизни поста я начал замечать утечку кармы, так что заранее прошу прощение за возможно недопустимый стиль изложения в статье и субъективизм

Привет, Хабрахабр!

Последнее время я не мог не обратить внимание на популярность темы Qt на хабрике, но тем не менее, в комментах продолжают встречаться люди, которые говорят откровенно лживые и непонятные вещи. Этим постом я хотел развеять малость заблуждений о Qt и рассказать, почему же ты должен пересесть со своих Java/Obj-C/.NET на мягкий и пушистый Qt .

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

Ну, что, поехали?

Вешч №1. С++ API

Ни для никого не секрет, что у Qt очень удобное API, а конкретнее говоря, модуль qtbase содержит достаточное количество классов для большинства повседневных задач (Qt - это больше, чем GUI фреймворк, лол ). Я уже говорил об обертках STL-ных контейнеров в своей статье трехгодичной давности - . Классы для работы со строками, отладочный вывод, и много-много чего, так же included.

QString fruits = "apple, banana, orange, banana"; QStringList fruitsList = fruits.split(", "); qDebug() << fruitsList; // выведет в консоль [ "apple", "banana", "orange", "banana" ] fruitsList.removeDuplicates(); fruits = fruitsList.join(", "); qDebug() << fruits; // выведет в консоль "apple, banana, orange"
Стоит сказать, что у Qt также есть модули для удобной работы с XML, базами данных (с интеграцией вкусной-превкусной кьютешной системой MVC ), OpenGL, аудио/видео-работы (Phonon), сетевого программирования, WebKit2. Для больниства задач, которые стоят перед среднестатистическим проектом - этой кухни хватает в 90% случаев, а с модулями редко случаются з*ебы.

С учетом моей любви к C++, я очень и очень сильно доволен тем, какую поддержку различных нетривиальных вещей Qt представляет на кросс-платформенном уровне. Пару раз приходилось разруливать особо непонятные моменты, но это такое.

Вешч №2. Qt Quick

Qt Quick - это мегасмачный подход к созданию графического пользовательского интерфейса. Используя декларативный язык QML (угадайте, где его придумали, лол), похожий на JavaScript, можно добиться высокой производительности при прототипировании интерфейса в приложениях любой сложности. А самое забавное, что при таком ходе дел, с прототипированием интерфейса может справиться даже дизайнер, который знает синтаксис JavaScript . Это все были бы пустые слова, если бы я не показал вам пример функционального кода (больше можно найти на Qt Project - тамц).

Import QtQuick 2.0 Rectangle { id: page width: 320; height: 480 color: "lightgray" Text { id: helloText text: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font.bold: true } Grid { id: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 rows: 2; columns: 3; spacing: 3 Cell { cellColor: "red"; onClicked: helloText.color = cellColor } Cell { cellColor: "green"; onClicked: helloText.color = cellColor } Cell { cellColor: "blue"; onClicked: helloText.color = cellColor } Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor } Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor } Cell { cellColor: "black"; onClicked: helloText.color = cellColor } } }

Имплементация объекта Cell крайне тривиальна и определена таким образом

import QtQuick 2.0 Item { id: container property alias cellColor: rectangle.color signal clicked(color cellColor) width: 40; height: 25 Rectangle { id: rectangle border.color: "white" anchors.fill: parent } MouseArea { anchors.fill: parent onClicked: container.clicked(container.cellColor) } }

В этом коде нету ни строчки С++ и он нормально работает. Годно, не так ли? Я себя даже волшебником от этого почуствовал - проще в магазин за хлебом сходить, чем приложение вот такое склепать. Тем не менее, в сложных приложениях не хватает одного QML и мы объединяем его с С++. Об этом шла речь в многих статьях хаба Qt Software - например, .

Вешч №3. Сообщество

Ну вот мы и дошли до приятного момента. Если говорить о мне, то я работаю с Qt относительно мало - всего 5 лет. Qt проводит ежегодные мероприятия - Qt Developer Days и Qt Contributors" Summit. Я был на каждом из них по одному разу, в прошлом году, и мне очень понравилось - уровень подготовки высокий, а впечателения доставляют. Мне также приходилось общаться с «ветеранами» Qt - людьми, которые посещали саммит на протяжении 10 лет. Представляю, насколько круто на своих глазах видеть рост такого проекта и быть в эпицентре всей разработки - просто смачненько.

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

Вешч №4. Открытый исходный код и code review

Сорец кьюта открыто разрабатывается в основном, компаниями Digia (комм. поддержка +), KDAB, ICS и энтузиастами-разработчиками. Хостится все это дело на Gitorious - тадамц . Чтобы внести свою лепту в развитие проекта, нужно пройти строгую проверку кода - автоматизированную (соблюдения стиля кода, о котором я уже писал ранее - ) и человеческую - твой код будут смотреть бородатые дяди, которые не доверяют тебе и будут искать в твоем коде бэкдоры. Все это достаточно сложный процесс (заморочки с Git / ревизии на Review Board) и я наверное напишу об этом статью на днях.

У меня, к слову, есть пару коммитов в дереве qtbase, так что можете спрашивать в лс - попробую ответить на вопросы.

Вешч №5. Динамика развития проекта

Qt разрабатывается уже много лет, с конца 90-х. За это время его коммерческой версией уже успели наиграться такие компании, как Trolltech и Nokia, а сейчас этим занимается Digia. Но одно можно точно сказать, проект живет и процветает. Еще несколько лет дизайн все писали на виджетах (С++ классы, все до единого основанные на QWidget), а сегодня его может сделать и маленький ребенок. Думаю, не стоит говорить, что параллельно с ним активно развивается мошнейшая вешч - Qt Creator, который сегодня радует не только Qt программистов!

^ классненький Qt Creator, в котором можно творить чудеса и тебе за это ничего не будет .

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

К тому же, сейчас идет активное развитие платформ iOS, Android, Windows Phone , уже сейчас можно собирать под них программы!

Итог

Я думаю вы понимаете, что Qt - это правда круто и после прочтения статьи вы полюбили его так же, как и я.
Спасибо за внимание!

После суток жизни поста я начал замечать утечку кармы, так что заранее прошу прощение за возможно недопустимый стиль изложения в статье и субъективизм

Привет, Хабрахабр!

Последнее время я не мог не обратить внимание на популярность темы Qt на хабрике, но тем не менее, в комментах продолжают встречаться люди, которые говорят откровенно лживые и непонятные вещи. Этим постом я хотел развеять малость заблуждений о Qt и рассказать, почему же ты должен пересесть со своих Java/Obj-C/.NET на мягкий и пушистый Qt .

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

Ну, что, поехали?

Вешч №1. С++ API

Ни для никого не секрет, что у Qt очень удобное API, а конкретнее говоря, модуль qtbase содержит достаточное количество классов для большинства повседневных задач (Qt - это больше, чем GUI фреймворк, лол ). Я уже говорил об обертках STL-ных контейнеров в своей статье трехгодичной давности - тыцк . Классы для работы со строками, отладочный вывод, и много-много чего, так же included.

QString fruits = "apple, banana, orange, banana"; QStringList fruitsList = fruits.split(", "); qDebug() << fruitsList; // выведет в консоль [ "apple", "banana", "orange", "banana" ] fruitsList.removeDuplicates(); fruits = fruitsList.join(", "); qDebug() << fruits; // выведет в консоль "apple, banana, orange"
Стоит сказать, что у Qt также есть модули для удобной работы с XML, базами данных (с интеграцией вкусной-превкусной кьютешной системой MVC ), OpenGL, аудио/видео-работы (Phonon), сетевого программирования, WebKit2. Для больниства задач, которые стоят перед среднестатистическим проектом - этой кухни хватает в 90% случаев, а с модулями редко случаются з*ебы.

С учетом моей любви к C++, я очень и очень сильно доволен тем, какую поддержку различных нетривиальных вещей Qt представляет на кросс-платформенном уровне. Пару раз приходилось разруливать особо непонятные моменты, но это такое.

Вешч №2. Qt Quick

Qt Quick - это мегасмачный подход к созданию графического пользовательского интерфейса. Используя декларативный язык QML (угадайте, где его придумали, лол), похожий на JavaScript, можно добиться высокой производительности при прототипировании интерфейса в приложениях любой сложности. А самое забавное, что при таком ходе дел, с прототипированием интерфейса может справиться даже дизайнер, который знает синтаксис JavaScript . Это все были бы пустые слова, если бы я не показал вам пример функционального кода (больше можно найти на Qt Project - тамц).

Import QtQuick 2.0 Rectangle { id: page width: 320; height: 480 color: "lightgray" Text { id: helloText text: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font.bold: true } Grid { id: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 rows: 2; columns: 3; spacing: 3 Cell { cellColor: "red"; onClicked: helloText.color = cellColor } Cell { cellColor: "green"; onClicked: helloText.color = cellColor } Cell { cellColor: "blue"; onClicked: helloText.color = cellColor } Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor } Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor } Cell { cellColor: "black"; onClicked: helloText.color = cellColor } } }

Имплементация объекта Cell крайне тривиальна и определена таким образом

import QtQuick 2.0 Item { id: container property alias cellColor: rectangle.color signal clicked(color cellColor) width: 40; height: 25 Rectangle { id: rectangle border.color: "white" anchors.fill: parent } MouseArea { anchors.fill: parent onClicked: container.clicked(container.cellColor) } }

В этом коде нету ни строчки С++ и он нормально работает. Годно, не так ли? Я себя даже волшебником от этого почуствовал - проще в магазин за хлебом сходить, чем приложение вот такое склепать. Тем не менее, в сложных приложениях не хватает одного QML и мы объединяем его с С++. Об этом шла речь в многих статьях хаба Qt Software - например, тамц .

Вешч №3. Сообщество

Ну вот мы и дошли до приятного момента. Если говорить о мне, то я работаю с Qt относительно мало - всего 5 лет. Qt проводит ежегодные мероприятия - Qt Developer Days и Qt Contributors" Summit. Я был на каждом из них по одному разу, в прошлом году, и мне очень понравилось - уровень подготовки высокий, а впечателения доставляют. Мне также приходилось общаться с «ветеранами» Qt - людьми, которые посещали саммит на протяжении 10 лет. Представляю, насколько круто на своих глазах видеть рост такого проекта и быть в эпицентре всей разработки - просто смачненько.

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

Вешч №4. Открытый исходный код и code review

Сорец кьюта открыто разрабатывается в основном, компаниями Digia (комм. поддержка +), KDAB, ICS и энтузиастами-разработчиками. Хостится все это дело на Gitorious - тадамц . Чтобы внести свою лепту в развитие проекта, нужно пройти строгую проверку кода - автоматизированную (соблюдения стиля кода, о котором я уже писал ранее - птссс) и человеческую - твой код будут смотреть бородатые дяди, которые не доверяют тебе и будут искать в твоем коде бэкдоры. Все это достаточно сложный процесс (заморочки с Git / ревизии на Review Board) и я наверное напишу об этом статью на днях.

У меня, к слову, есть пару коммитов в дереве qtbase, так что можете спрашивать в лс - попробую ответить на вопросы.

Вешч №5. Динамика развития проекта

Qt разрабатывается уже много лет, с конца 90-х. За это время его коммерческой версией уже успели наиграться такие компании, как Trolltech и Nokia, а сейчас этим занимается Digia. Но одно можно точно сказать, проект живет и процветает. Еще несколько лет дизайн все писали на виджетах (С++ классы, все до единого основанные на QWidget), а сегодня его может сделать и маленький ребенок. Думаю, не стоит говорить, что параллельно с ним активно развивается мошнейшая вешч - Qt Creator, который сегодня радует не только Qt программистов!

^ классненький Qt Creator, в котором можно творить чудеса и тебе за это ничего не будет .

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

К тому же, сейчас идет активное развитие платформ iOS, Android, Windows Phone , уже сейчас можно собирать под них программы!

Итог

Я думаю вы понимаете, что Qt - это правда круто и после прочтения статьи вы полюбили его так же, как и я.
Спасибо за внимание!

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

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

На тему: Среда программирования 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, встраиваемых 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

#include

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:

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)

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

#include "mainwindow.h"

int main(int argv, char **args)

QApplication app(argv, args);

MainWindow window;

return app.exec();

Mainwindiw.h #ifndef MAINWINDOW_H#define MAINWINDOW_H #include 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 #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);

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

QPoint point(5, 10);

QPoint point2(5, 10);

if (point == point2)

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()

mycolor.setHsv(200, 100, 50);

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

unsigned int h, s, v;

QColor mycolor(100, 100, 100);

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

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

QPainter pnt(this);

pnt.drawLine(line);

void Wnd::paintEvent(QPaintEvent *event)

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

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, антиалиасинг):

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

tl;dr — Qt библиотека для создания кроссплатформенных оконных приложений на C++.

Qt, как проект, зародился из желания разработчиков C++ иметь удобный инструментарий разработки графических интерфейсов программ (GUI). Если, например, в Java для этих целей из коробки идет AWT, а в Python Tk, то в С++ не было ничего подобного. И не только того что касается разработки GUI, а так же классов работы с сетью, мультимедиа и прочих очень востребованных вещей. Чему очень досадовали разработчики. Ну а раз есть спрос, то предложение не заставило себя долго ждать. В 1995 году вышел первый релиз библиотеки. С тех пор Qt быстро стал расширяться за пределы всего-лишь разработки интерфейсов.

Поэтому, Qt стоит рассматривать не столько набор классов для создания GUI, а скорее как полноценный инструментарий классов на все случаи жизни. Этот набор всего (ну или почти всего) что может потребоваться программисту-прикладнику для создания практически любого приложения. Структура библиотеки логично разбита на компоненты, их очень много и с каждой новой версией Qt в них становится все больше и больше полезных классов.

Основных компонента два — QtCore являющий собой ядро библиотеки и QtGui представляющий компоненты графического интерфейса. Как мы в дальнейшем увидим, создаваемый проект всегда имеет при себе два этих компонента (за исключение консольных приложений, в которых обязательную роль играет QtCore).

Ну а далее, в зависимости от потребностей, разработчики вольны использовать все что душе угодно. QtNetwork для работы с сетью, написать свой Torrent-клиент. QtMultimedia для реализации видео-аудио плеера. QtWebEngine для встраивания в свое приложение полноценного браузерного движка. И многое другое.

Стоит так же отметить, что заявленная кроссплатформенность действительно присутствует. Вы можете взять свой код разрабатываемый на одной системе (Windows, MinGW) и скомпилировать ее компилятором другой системы (Linux, GCC) и получить бинарный файл способный запускаться там без особых хлопот. Как показала практика, особые хлопоты начинаются когда приложение становится сильно обвешенным сторонними библиотеками.

Приятным бонусом для веб-разработчиков станет возможность разрабатывать программы не только на C++, но и языке QML, сильно схожим с JavaScript. Это особая ветка развития Qt, направленная на быстрое прототипирование и разработку мобильных приложений.

Ну и конечно же, одной из изюминок Qt является среда разработки Qt Creator. Универсальная и очень удобная среда разработки на Qt, не перегруженная лишним функционалом, .

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: