После суток жизни поста я начал замечать утечку кармы, так что заранее прошу прощение за возможно недопустимый стиль изложения в статье и субъективизм
Привет, Хабрахабр!
Последнее время я не мог не обратить внимание на популярность темы 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 - это правда круто и после прочтения статьи вы полюбили его так же, как и я.Спасибо за внимание!
Рис. A.1.
После перезагрузки ОС Windows для обращения к компилятору достаточно будет указывать его имя - g++ .
Таким образом, в ОС Linux для работы с компилятором в командной строке необходимо запустить Терминал, а в ОС Windows – командную строку. После чего работа с компилятором g++ с ОС Windows и Linux идентична.
Рассмотрим опции компилятора командной строки, необходимые для компиляции и запуска простейших программ.
Для того, чтобы создать исполняемый файл из текста программы на C++ , необходимо выполнить команду
Здесь name.cpp - имя файла с текстом программы. В результате будет создан исполняемый файл со стандартным именем a.out. Для того, чтобы создать исполняемый файл с другим именем, необходимо выполнить команду
g++ -o nameout name.cpp
Здесь name.cpp - имя файла с текстом программы, nameout - имя исполняемого файла.
При использовании компилятора g++ после компиляции программы автоматически происходит компоновка программы (запуск компоновщика make). Чтобы исключить автоматическую компоновку программы, следует использовать опцию -c. В этом случае команда будет иметь вид g++ -c name.cpp
Рис. A.2.
Рис. A.3.
Технология работы с компилятором g++ может быть такой: набираем текст программы в стандартном текстовом редакторе, потом в консоли запускаем компилятор, после исправления синтаксических ошибок запускаем исполняемый файл. После каждого изменения текста программы надо сохранить изменения в файле на диске, запустить компилятор, и только после этого запускать программу (исполняемый файл). Очень важно не забывать сохранять текст программы, иначе при запуске компилятора будет компилироваться старая версия текста программы.
Рис. A.4.
Рис. A.5.
Компилятор g++ эффективен при разработке больших комплексов программ, он позволяет собирать приложения из нескольких файлов, создавать библиотеки программ. Рассмотрим процесс создания и использования библиотеки решения задач линейной алгебры (см. п. 6.4, задачи 6.10 - 6.12):
int SLAU(double **matrica_a, int n, double *massiv_b, double *x) - функция решения системы линейных алгебраических уравнений;
int INVERSE(double **a, int n, double **y) - функция вычисления обратной матрицы;
double determinant(double **matrica_a, int n) - функция вычисления определителя.
Для создания библиотеки создадим заголовочный файл slau.h и файл slau.cpp , в который поместим тексты всех трёх функций решения задач линейной алгебры.
Текст файла slau1.h:
int SLAU(double ** matrica_a, int n, double *massiv_b, double *x); int INVERSE(double **a, int n, double **y); double determinant (double ** matrica_a, int n);
Текст файла slau1.cpp :
#include В качестве тестовой задачи напишем главную функцию, которая предназначена для решения системы линейных алгебраических уравнений. #include Теперь необходимо из этих текстов создать работающее приложение. Рассмотрим это поэтапно. После разработки библиотеки линейной алгебры (пример) slau1
, можно использовать её в различных программах при вычислении определителя, обратной матрицы и решения систем линейных алгебраических уравнений. При разработке программ с большим количеством вычислений, компилятор g++
позволяет оптимизировать программы по быстродействию. Для получения оптимизированных программ можно использовать ключи -O0, -O1, -O2, -O3, -Os
: Для разработки программ на различных языках программирования можно использовать текстовый редактор Geany
. Редактор Geany
входит в репозитории большинства дистрибутивов Linux, его установка осуществляется стандартным для вашего дистрибутива образом (в debian-подобных ОС с помощью команды apt-get install geany
). Для установки его в Windows необходимо скачать со страницы http://www.geany.org/Download/Releases инсталляционный файл и установить программу стандартным способом. Разработка программ с использованием Geany более эффективна. Окно Geany представлено на . Последовательно рассмотрим основные этапы разработки программы с использованием Geany
. Параметры компилятора определяются автоматически после выбора шаблона (Файл -> Создать из шаблона). Однако команды компиляции и сборки по умолчанию можно изменить, используя команду Сборка -> Установить параметры сборки (см. ). Здесь %f
- имя компилируемого файла, %e
- имя файла без расширения. Рис. A.6.
Рис. B.1.
Задача B.2.
Построить графики функций и в одной графической области. #include Рис. B.2.
Задача B.3.
Построить в одном графическом окне графики функций: Результаты вывести на экран и в файл. Рис. B.3.
#include Рис. B.4.
Задача B.4.
Построить график функций . Нетрудно заметить, что функция не существует в точке ноль. Поэтому построим её график на двух интервалах [-2;-0.1] и , исключив точку разрыва из диапазона построения. Текст программы с подробными комментариями приведён далее. Решение задачи представлено на . #include Рис. B.5.
Задача B.5.
Построить график функции на интервале [-5;5]. Функция имеет разрыв в точках -1 и 3. Построим её график на трёх интервалах [-5; -1.1], [-0.9;2.9] и , исключив точки разрыва из диапазона построения. Текст программы с подробными комментариями приведён далее. Решение задачи представлено на . #include Рис. B.6.
Задача B.6
. Построить график функции . График задан в параметрической форме и представляет собой эллипс. Выберем интервал построения графика , ранжируем переменную на этом интервале, сформируем массивы и и построим точечный график. Текст программы и результаты её работы () представлены далее. #include Рис. B.7.
Задача B.7.
Построить график функции: В данном случае необходимо построить график функции двух аргументов. Для этого нужно сформировать матрицу при изменении значений аргументов и и отобразить полученные результаты. #include Рис. B.9.
График к задаче B.8 В завершении приведём решение реальной инженерной задачи с использованием MathGL
. Задача B.9.
В "Основах химии" Д. И. Менделеева приводятся данные о растворимости азотнокислого натрия в зависимости от температуры воды. Число условных частей , растворяющихся в 100 частях воды при соответствующих температурах, представлено в таблице. Текст программы решения задачи с комментариями приведён ниже. #include После запуска программы на экране пользователь увидит следующие значения X
0 4 10 15 21 29 36 51 68
Y
66.7 71 76.3 80.6 85.7 92.9 99.4 113.6 125.1
k=3
a=67.5078 b=0.87064
Xr Yr
25 89.2738
32 95.3683
45 106.687 Графическое решение задачи, полученное с помощью средств библиотеки MathGL
, представлено на . Рис. B.11.
Для изучения всех возможностей MathGL
, авторы советуют обратиться к документации по MathGL
. При освоении библиотеки MathGL
следует помнить, что логика и синтаксис библиотеки напоминает синтаксис Scilab
и Octave
. В этом примере мы опишем шаги использования Qt Creator для написания маленькой программы Qt, Text Finder. Вдохновлённые примером QtUiTools Text Finder , мы напишем похожую на него но упрощённую версию как показано ниже. После того как вы установили Qt Creator, он автоматически определит, находится ли Qt в вашей переменной PATH . Если Qt не находится в вашем PATH , вы можете установить его одним из следующих способов, в зависимости от вашей платформы: Замечание:
Если для сборки Qt вы использовали Visual Studio, все переменные окружения, установленные в Visual Studio, должны быть также установлены для Qt Creator. Мы начнём с проекта Gui приложение Qt4, сгенерированного Qt Creator. Документ Создание проекта в Qt Creator детально описывает этот проект. Не забудьте выбрать QWidget в качестве базового класса Text Finder. Если ваш проект ещё не загружен, вы можете загрузить его выбрав Открыть...
из меню Файл
. В вашем проекте будут следующие файлы: Файлы.h и.cpp содержат необходимые строки кода; файл.pro также завершён. Мы начнём с проектирования интерфейса пользователя и затем перейдём к заполнению недостающего кода. В заключение мы добавим поиск. Для начала проектирования интерфейса пользователя, щёлкните два раза на файле textfinder.ui в вашем обозревателе проекта
. Это запустит интегрированный Qt Designer. Спроектируйте форму выше с использованием QLabel , QLineEdit (назовите его lineEdit), QPushButton (назовите её findButton) и QTextEdit (назовите его textEdit). Мы рекомендуем вам использовать QGridLayout для расположения QLabel , QLineEdit и QPushButton . QTextEdit можно добавить в QVBoxLayout помимо QGridLayout . Если вы новичок в проектировании форм с Qt Designer
, вы можете взглянуть на руководство по Qt Designer . Файл textfinder.h уже имеет необходимые заголовочные файлы, конструктор, деструктор и объект Ui . Нам необходимо добавить закрытый слот on_findButton_clicked() для выполнения операции поиска. Нам также необходима закрытая функция loadTextFile() для чтения и отображения содержимого входного файла в QTextEdit . Это делается следующим кодом: Private slots:
void on_findButton_clicked();
private:
Ui::TextFinder *ui;
void loadTextFile();
Замечание:
Объект Ui::TextFinder уже предоставлен. Теперь, когда наш заголовочный файл завершён, перейдём к файлу исходных кодов textfinder.cpp . Мы начнём с заполнения функциональности для загрузки текстового файла. Это описано в куске кода ниже: Void TextFinder::loadTextFile()
{
QFile inputFile(":/input.txt");
inputFile.open(QIODevice::ReadOnly);
QTextStream in(&inputFile);
QString line = in.readAll();
inputFile.close();
ui->textEdit->setPlainText(line);
QTextCursor cursor = ui->textEdit->textCursor();
cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1);
}
Мы загружаем текстовый файл используя QFile , читаем его с помощью QTextStream , а затем отображаем его в textEdit с помощью setPlainText() , что требует добавления дополнительных директив #includes в textfinder.cpp:
#include Для слота on_findButton_clicked() мы извлекаем строку поиска и используем функцию find() для поиска строки в текстовом файле. Это описано в куске кода ниже: Void TextFinder::on_findButton_clicked()
{
QString searchString = ui->lineEdit->text();
ui->textEdit->find(searchString, QTextDocument::FindWholeWords);
}
После того как эти функции завершены, мы вызываем loadTextFile() в нашем конструкторе. TextFinder::TextFinder(QWidget *parent)
: QWidget(parent), ui(new Ui::TextFinder)
{
ui->setupUi(this);
loadTextFile();
}
Слот on_findButton_clicked() будет вызван автоматически в этой строчке: QMetaObject::connectSlotsByName(TextFinder);
в файле ui_textfinder.h , сгенерированном uic. Нам потребуется файл ресурсов (.qrc) в котором мы сохраним текстовый файл. Это может быть любой файл.txt с абзацем текста. Чтобы добавить файл ресурсов щёлкните правой кнопкой мыши на Файлы ресурсов
в обозревателе проектов
и выберите Добавить новый файл...
. Вы увидите диалог мастера, показанный ниже. Введите "textfinder" в поле Имя
и используйте заданный Путь
. Затем щёлкните Вперёд
. На этой странице вы можете выбрать в какой проект вы хотите добавить новый файл. Убедитесь, что пункт Добавить в проект
выбран, а "TextFinder" выбран как Проект
, и щёлкните на Завершить
. Ваш файл ресурсов будет отображён в редакторе ресурсов. Щёлкните на выпадающем списке Добавить
и выберите Добавить приставку
. Приставка, которая нам требуется, это просто косая черта (/). Щёлкните на Добавить
снова, но на этот раз выберите Добавить файлы
. Найдите текстовый файл, который вы хотите использовать, мы будем использовать input.txt . Снимок экрана выше что вы можете ожидать после того как успешно добавили файл ресурсов. Теперь, когда у вас есть все необходимые файлы, вы можете скомпилировать вашу программу, нажав на кнопку . Qt
— это кроссплатформенный фреймворк
для разработки ПО на языке программирования C++
(и не только). Также имеется и для Ruby — QtRuby
, для Python — PyQt
, PHP — PHP-Qt
и других языков программирования. Разрабатывается компанией Trolltech
с 1996 года. С использованием этого фреймворка написано множество популярных программ: 2ГИС для Android, Kaspersky Internet Security, Virtual Box, Skype, VLC Media Player, Opera и другие. KDE
— это одно из окружений рабочего стола со множеством программ для Linux написано с использованием фреймворка Qt. Qt
полностью объектно-ориентированная, кросс-платформенная. Дает возможность разрабатывать платформо-независимое ПО, написанный код можно компилировать для Linux, Windows, Mac OS X
и других операционных систем. Включает в себя множество классов для работы с сетью, базами данных, классы-контейнеры, а также для создания графического интерфейса и множество других(чуть ниже). Qt
использует MOC
(Meta Object Compiler) для предварительной компиляции программ. Исходный текст программы обрабатывается MOC, который ищет в классах программы макрос Q_OBJECT и переводит исходный код в мета-объектный код, после чего мета-объектный код компилируется компилятором C++. MOC расширяет функциональность фреймворка, благодаря ему добавляются такие понятия, как слоты и сигналы. В Qt
имеется огромный набор виджетов (Widget), таких как: кнопки, прогресс бары, переключатели, checkbox, и другие — они обеспечивают стандартную функциональность GUI (графический интерфейс пользователя). Позволяет использовать весь функционал пользовательского интерфейса — меню, контекстные меню, drag&drop. Как видно на картинке, программы имеют родной внешний вид в различных операционных системах. Qt
имеет среду разработки Qt Creator
. Она включает в себя Qt Designer
, с помощью которого можно создавать графический интерфейс. Визуальное создание интерфейса позволяет легко и просто создавать интерфейс, перетаскивая различные виджеты(выпадающие списки, кнопки, переключатели) на форму. Qt
поставляется вместе с Qt Assistant
— это огромный интерактивный справочник, содержащий в себе информацию по работе с Qt
. К сожалению полностью не переведен на русский. В состав Qt
также входит Qt Linguist
, которая позволяет локализировать приложение для разных языков. Библиотека Qt
состоит из различных модулей, которые подключаются при помощи директивы #include
. В состав входят: QtCore — классы ядра библиотеки Qt, они используются другими модулями. QtGui — модуль содержит компоненты графического интерфейса. QtNetwork — модуль содержит классы для работы с сетью. В него входят классы для работы с протоколами FTP, HTPP, IP и другими. QtOpenGL — модуль содержит классы для работы с OpenGL QtSql — содержит классы для работы с различными базами данных с использованием языка SQL. QtSvg — содержит классы, позволяющие работать с данными Scalable Vector Graphics (SVG) QtXml — классы для работы с XML QtScript — классы для работы с Qt Scripts Имеются и другие модули. В данный момент Qt
распрастраняется по 3-м лицензиям: Qt Commercial(собственическая), GNU GPL, GNU LGPL. В настоящее время Qt фреймворк
активно развивается. Имеет интуитивно понятное API, огромную документацию с большим количеством примеров, мощнейшую среду разработки QtCreator
и дополнительный инструментарий. Этот фреймворк стоит Вашего внимания. Это кросс-платформенный инструментарий разработки ПО на языке программирования C++. Есть также «привязки» ко многим другим языкам программирования: Python - PyQt, Ruby - QtRuby, Java - Qt Jambi, PHP - PHP-Qt и другие.
$ qmake -project При этом произойдет создание заготовки проекта Qt4, в который автоматически будут включены все файлы исходных кодов, лежащих в данной директории. В результате получится файл с именем как у текущей директории и расширением.pro. Он будет выглядеть следующим образом: TEMPLATE = app
# Input В результате мы получим Makefile, который используем для того что бы скомпилировать программу, выполнив следующую команду: Подождем пока процесс компиляции не закончится и запустим нашу первую программу. Она будет выглядеть примерно так:
$ qmake -project Что бы новые файлы автоматически в него добавились и компилируем его. Вот так выглядит наша новая программа: И выбираем создание диалогового окна без кнопок. Добавляем на него метку и кнопку, редактируем их текст. С помощью инструмента редактора сигналов и слотов (Signal/Slot Editor) подключаем сигнал нажатия clicked() кнопки button к слоту close() диалогового окна. Располагаем их вертикально с помощью менеджера компоновки. Сохраняем полученный файл под именем mydialog.ui. Позже он будет автоматически преобразован в заголовочный файл с именем ui_mydialog.h.0
4
10
15
21
29
36
51
68
66.7
71.0
76.3
В первой строке файла хранится количество экспериментальных точек, в следующих двух строках - массивы абсцисс и ординат экспериментальных точек. В четвёртой строке хранится количество (3) и точки (25, 32, 45), в которых необходимо вычислить ожидаемое значение.Настройка вашей среды
Настройка проекта
Заполнение недостающих кусков
Проектирование пользовательского интерфейса
Заголовочный файл
Файл исходных кодов
Файл ресурсов
Сборка и запуск вашего приложения
Состав библиотеки Qt
Заключение
Для вас это может быть интересно:
Позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путём простой компиляции программы для каждой ОС без изменения исходного кода. Включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. Qt является полностью объектно-ориентированным, легко расширяемым и поддерживающим технику компонентного программирования.
В этой статье я покажу как написать простую программу «Hello, World!» с использованием библиотеки Qt4 Среда разработки
Сначала определимся со средой разработки. Лично я для написания программа использую кросс платформенную IDE Code::Blocks (подробнее про работу в этой IDE с Qt4 можно почитать ). Так же есть плагины для работы с Qt в Eclipse. Коммерческая версия Qt под MS Windows может быть интегрирована в MSVS. Программы так же можно писать в любом текстовом редакторе, а потом компилировать их из командной строки.
Для наглядности, я покажу как компилировать программы, написанные на Qt, вручную.Первая программа
Сначала в любом текстовом редакторе создадим файл и назовем его, например, main.cpp
Напишем в нем следующее:
В строках 1 и 2 мы подключили заголовочные файлы Qt в которых находятся основные классы.
В строке 4 мы объявили функцию main - главную функцию, с которой начинается выполнение любой программы. Она возвращает целое число (результат работы программы; 0 - если все в порядке) и принимает на вход две переменные - число параметров командной строки и массив, в котором они сохранены.
В строке 5 мы создаем объект приложения. Этому объекту мы передаем переменные командной строки.
В строке 6 мы создаем диалог - графическое окно прямоугольной формы, с заголовком и кнопками в верхнем правом углу. Создаем метку (строка 7). При создании метки мы передаем ее конструктору указатель на диалог, который становится ее родителем. При удалении родителя автоматически удаляются все его потомки, что очень удобно. Затем устанавливаем надпись метки путем вызова функции setText() (строка 8). Как видно из примера, для отображаемого текста можно использовать html-теги.
В строке 9 мы отображаем наше диалоговое окно с меткой на экране.
И, наконец в строке 10 мы запускаем цикл обработки событий операционной системы приложением. Результат работы объекта мы возвращаем как результат работы программы.Компиляция
Теперь скомпилируем написанную программу.
Перейдем в каталог, куда мы сохранили наш файл main.cpp и выполним команду
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
SOURCES += main.cpp Вторая программа
Что бы получить полный контроль над создаваемыми окнами и другими виджетами, необходимо создавать производные от них классы. Создадим производный класс MyDialog. В качестве родительского будем использовать класс QDialog. Описание нашего класса поместим в заголовочный файл mydialog.h:
В первых четырех строках мы подключаем необходимые заголовочные файлы используемых графических элементов - диалога, кнопки, надписи и вертикального менеджера компоновки. Использовать такие крупные заголовочные файлы как
* This source code was highlighted with Source Code Highlighter
.
В шестой строке мы определили наш класс производным от QDialog.
На следующей строчке мы указали макрос Q_OBJECT, который указывает предпроцессору Qt что данный класс будет использовать дополнительные возможности Qt, например, систему сигналов и слотов.
На строке 9 мы указываем конструктор нашего диалогового окна. У него только один входной параметр - указатель на родительский объект (0 если родителя нет).
Конструктор нашего класса мы определим в файле mydialog.cpp:
* This source code was highlighted with Source Code Highlighter
.
В строке 4 мы создаем менеджер компоновки, который будет автоматически отображать все добавленные в него виджеты вертикально. Создание надписи аналогично предыдущему примеру.
В строках 7 и 8 создаем кнопку и устанавливаем ее текст. На следующих двух строчках мы добавляем наши виджеты в менеджер компоновки что бы он их автоматически упорядочил.
В строке 11 мы подключаем сигнал нажатия clicked() кнопки button к слоту close() нашего диалогового окна. У каждого объекта Qt могут быть свои сигналы и слоты, которые можно подключать к сигналам и слотам других объектов и таким образом осуществлять коммуникацию между элементами программы.
Файл main.cpp примет следующий вид:
* This source code was highlighted with Source Code Highlighter
.
Пересоздаем проект командойТретья программа
Если диалоговое окно содержит много графических элементов, то создавать такие окна довольно утомительно. Для упрощения этого процесса есть инструмент под названием Qt Designer. Запускаем его
Изменяем заголовочный файл нашего диалогового окна mydialog.h следующим образом: