Первая программа на Qt:
Qt – это мощный инструментарий, имеющий множество способов для воплощения задумок программиста в жизнь. Давайте начнём его освоение с самой первой программы
Итак, у вас под рукой имеется среда разработки QtCreator с подключенным к ней компилятором(например MinGW ). В среде разработки выбираем Другой проект-> Проект с поддиректориями.
Название: cppstudio . Здесь для удобства мы будем хранить все приложения взятые с сайта. Создадим здесь под проект QWidget с название lesson_1 и удаляем в нём файлы mainwindows.h , mainwindows.cpp , и форму.
Переписываем код программы печатающей на экран «Привет мир!» в main.cpp :
#include #include #include #include int main(int argc, char *argv[]) < QApplication qapp(argc, argv); QHBoxLayout * hlayout = new QHBoxLayout; QLabel *label = new QLabel(«Привет мир!»); QPushButton *butt = new QPushButton(«Exit»); QWidget *mainWindow = new QWidget; QObject::connect(butt,SIGNAL(clicked()), hlayout->addWidget(label); hlayout->addWidget(butt); mainWindow->setLayout(hlayout); mainWindow->show(); return qapp.exec(); >
Давайте разберём код программы:
В строчках 1-4 идёт подключение нужных заголовочных файлов.
[Qt란?] 8년차 Qt덕후가 알려주는 Qt 소개 — 두 가지 키워드면 이해되는 Qt
В qt за графический интерфейс пользователя отвечает семейство классов . Так как нам понадобятся виджеты, то в первую очередь прописываем нужные библиотеки( QLabel , QPushButton ).
#include QApplication qapp(argc, argv);
Одноимённый класс, подключаемый через заголовочный файл QApplication нужен в любом Qt-проекте в единственном экземпляре. Он отвечает за отслеживание событий и сообщений в системе, изменения вида окон приложения и другие полезные функции.
QHBoxLayout * hlayout = new QHBoxLayout; QLabel *label = new QLabel(«Hello World»); QPushButton *butt = new QPushButton(«Exit»); QWidget *mainWindow = new QWidget;
В этой части через динамическую память резервируется место под классы.
QObject::connect(butt,SIGNAL(clicked()),
Через метод класса QObjekt::connect(addWidget(label); layout->addWidget(butt);
Для расположения и компоновки виджетов “в сетке”, горизонтально или вертикально используются классы QHBoxLayout, QGridLayout, QHBoxLayout. Метод-член addWidget добавляет их в менеджер компоновки.
mainWindow->setLayout(hlayout); mainWindow->show();
Последние строки устанавливают окну класс компоновки с его виджетами и заставляют его стать видимым.
В итоге у вас должна получится программа:
Источник: cppstudio.com
Qt project что это за программа
Библиотека сайта rus-linux.net
Qt является кроссплатформенным фреймворком для разработки приложений от компании Trolltech, а на данный момент владельцем кода является компания Nokia (на момент перевода статьи компания Nokia передала разработку Qt компании Digia — прим.пер.). Фреймворк предоставляет API на языке C++. Qt часто используется разработчиками для разработки кроссплатформенных приложений.
Азы работы с графикой в Qt
При помощи Qt можно разрабатывать приложения с графическим интерфейсом, приложения, работающие с сетью, приложения, работающие с базами данных и мультимедийные приложения, работать с XML-структурами и 3D-графикой, осуществлять рисование и доступ к сетевым ресурсам. Поскольку поддерживается ряд платформ, Qt может работать на Linux, Mac OS, Windows, Meego, встраиваемых Linux-системах и Symbian.
Архитектура Qt
Простейшая схема, демонстрирующая архитектуру Qt, представлена на Рисунке 1.
Рисунок 1: Архитектура Qt
На верхнем уровне находится код программы на языке C++. Уровнем ниже расположены классы Qt для создания графического интерфейса, взаимодействия с WebKit, работы с базами данных и.т.д., а еще ниже расположен уровень поддержки различных операционных систем. Ранее Qt поддерживал также язык программирования Java; версия для языка Java называлась Jambie. По мере продвижения разработки Qt, становилось все сложнее поддерживать версии для C++ и Java, поэтому и было принято решение поддерживать только версию для C++.
Установка Qt
Методы установки отличаются в зависимости от операционной системы. В ОС Ubuntu 10.04 LTS я установил Qt при помощи менеджера пакетов Synaptic — при установке пакета qtcreator по зависимостям будут установлены Qt Assistant, Qt Designer, Qt Linguist и Qt Creator.
Если вы хотите попробовать новейшую версию Qt, можете скачать установочный пакет с официального сайта и установить его. От вас требуется только позволить исполнение установочного пакета как программы при помощи команды chmod и запустить его, после чего следовать инструкциям.
Программа ‘Hello World’ (без графического интерфейса)
Откройте терминал. Создайте директорию с названием first и простейшую программу «Hello World» со следующим кодом:
#include int main()
Подключенный заголовочный файл QtCore содержит описания классов, не использующих графический интерфейс. Их мы рассмотрим в подробностях в следующих статьях. На данный момент будем просто использовать класс qDebug , который выводит отладочные сообщения в консоль и обладает функциями, эквивалентными cout при программировании на языке C++.
Как же скомпилировать эту программу? Разработчики из компании Trolltech представили простое решение для осуществления кроссплатформенной компиляции. Для начала должен быть создан файл проекта, на основе которого будет сгенерирован файл Makefile . После этого просто введите make для компиляции программы. Когда вы устанавливаете пакет Qt Creator, утилита qmake устанавливается вместе с ним.
Она является кроссплатформенным генератором файлов Makefile для Qt. Чтобы узнать больше об этой утилите, обратитесь к странице руководства. Выполните команду qmake -project для создания файла проекта (файла с расширением .pro и именем, идентичным имени директории проекта, т.е. first).
$ cat first.pro ###################################################################### # Automatically generated by qmake (2.01a) Mon Nov 28 05:49:29 2011 ###################################################################### TEMPLATE = app TARGET = DEPENDPATH += . INCLUDEPATH += . # Input SOURCES += main.cpp
Вы можете создавать как приложения, так и библиотеки; значением параметра TEMPLATE является app , говорящее о том, что разрабатывается приложение. Я затрону тему разработки библиотек в следующих статьях серии. Аргументом параметра SOURCES является список файлов исходного кода в рамках проекта, подробнее об этом будет сказано далее.
Теперь давайте сгенерируем файл Makefile при помощи утилиты qmake . Это длинный файл — он может содержать до 200 строк. Запустите команду make для компиляции исполняемого файла:
В последней строке вы можете заметить то, что наша программа использует также библиотеку для работы с потоками POSIX. Запустите программу при помощи команды ./first , чтобы увидеть вывод «Hello World». Программа работает! Только что мы успешно скомпилировали нашу первую программу.
Программа с графическим интерфейсом
Qt предоставляет возможность визуального проектирования графических интерфейсов методом drag-and-drop и автоматического создания файлов описания графических интерфейсов, которую мы рассмотрим в следующей статье. Сейчас же мы опишем вручную графический интерфейс нашей новой программы:
#include #include int main(int argc, char *argv[])
В нашем первом примере у программы не было графического интерфейса. Программа завершалась при возвращении из функции main. Тем не менее, мы не можем поступить также в программах с графическим интерфейсом, поскольку программы будет невозможно использовать. Мы хотим, чтобы графический интерфейс работал до того момента, как пользователь закрывает окно.
Для этого необходимо, чтобы программа работала в цикле до того, как пользователь закроет окно, поэтому следует использовать класс QApplication , в котором реализован цикл приема событий. Когда вы создаете экземпляр этого класса и вызываете его метод exec() , функция main не возвращает управления. Приложение находится в режиме ожидания событий от пользователя.
Второй заголовочный файл содержит описание класса QLabel , представляющего из себя простой виджет для вывода текста. Создайте экземпляр этого класса и установите текст «Hello World». При вызове метода show() виджета, он отображается в виде окна. Таким образом, виджет будет выглядеть как окно. На Рисунке 2 можно увидеть это окно с заголовком.
Вы можете изменить размеры окна просто при помощи мыши.
Рисунок 2: Виджет строки
В следующих статьях мы рассмотрим основные классы Qt. Между тем, я рекомендую вам внимательно рассмотреть официальную документацию Qt .
Источник: rus-linux.net
Структура проекта. Основные типы
Теперь давайте рассмотрим из чего состоит проект Qt . В общем, проект Qt имеет такую структуру:
- файл проекта — описывает файлы, которые входят в проект и содержит необходимые настройки;
- файлы, входящие в проект (или другие подпроекты, если проект разбит на несколько частей).
Ключевую роль имеет файл проекта с расширением .pro . Он содержит списки файлов: исходных кодов, файлов ресурсов, файлов локализации, форм, других файлов, которые входят в проект, а также файлов подпроектов, если проект состоит из нескольких частей. Этот файл также содержит некоторые настройки программы.
Теперь рассмотрим создание своего проектного файла. Создадим новую папку, где будет размещаться проект (например: custom_project ). Создайте файл (это будет файл проекта) введите его имя с расширением .pro (например: custom_project.pro ). Наш файл пока что пустой, но его уже можно открыть в Qt Creator (воспользуйтесь главным меню : File->Open File or Project.. .).
Создать пустой проект можно с помощью мастера построения проектов. Для этого надо воспользоваться главным меню File->New File or Project.. . либо комбинацией клавиш Ctrl+Shift+N . В окне мастера нужно выбрать раздел Other Project (Другой проект) и тип проекта — Empty Qt Project .
После того, как мы открыли проект, Qt Creator предлагает выбрать комплект для его компиляции. В разделе Projects (Проекты) выберем комплект по умолчанию и нажмём Configure Project . В дереве проекта выберем и откроем файл проекта. Теперь настало время исследовать синтаксис проектных файлов Qt .
Проектный файл обычно содержит несколько настроек в виде специальных переменных, каждая из которых играет свою особую роль. Среди большого количества настроек, которые задают в .pro -файле:
- тип проекта (приложение, динамическая или статическая библиотека, проект, который состоит из подпроектов);
- общие настройки проекта;
- настройки компиляции;
- путь, где будет размещён исполняемый файл, библиотека или бинарный файл во время процесса компиляции;
- пути к файлам, библиотекам и другим частям проекта необходимым для компиляции;
- файлы, входящие в проект;
- дополнительные действия, которые будут выполняться в процессе компиляции проекта.
Откройте проектный файл и добавьте к нему содержимое. Обратите внимание: символ # можно использовать для обозначения комментариев.
# Указываем тип проекта TEMPLATE = app # app — Application, прикладная программа # Используемые модули Qt QT -= gui # Удаляем из списка модуль gui # это означает отказ от использования графического интрефейса, # то есть — консольную программу CONFIG += console # Конфигурируем создание консольного проекта # (нужно только для консольных проектов в Windows, в Linux и Mac OS X не выполняет никаких действий) CONFIG -= app_bundle # Предотвращает создание Application bundle в Mac OS X # (нужно только для консольных проектов в Mac OS X) TARGET = custom_project # Название исполняемого файла
Теперь нам осталось добавить в проект файл с текстом программы. Для этого мы снова можем воспользоваться мастером. В категории Files and Classes (Файлы и классы) выберем раздел C++ и выберем тип файла » C++ Source File » ( Файл исходных текстов C++ ). Поскольку это будет главный файл программы, то дадим ему привычное для этого случая название: main.cpp . Текст программы является обычным:
int main ( int lArg c, char * lArgv [ ] )
После создания main.cpp , вновь откроем файл проекта и обратим внимание на несколько дополнительных строк:
SOURCES += main.cpp
Переменная SOURCES хранит список .cpp файлов. В табл. 12.1 мы предоставляем список переменных, которые часто участвуют в описании проекта:
CONFIG += dll plugin warn_on release
DEFINES += DEBUG_OUTPUT CUSTOM_DEFINE
DESTDIR = ./bin
INCLUDEPATH += ./includes ./my_header_files
FORMS += mainwindow.ui
HEADERS += mainwindow.h
LIBS += -L./libs -L./my_libs -lmycustomlib
QT += core gui widgets network sql xml
RESOURCES = resources.qrc
SOURCES += main.cpp mainwindow.cpp
TARGET = MyFirstProject
Источник: intuit.ru
Первая программа на Qt
Создадим простейшее оконное приложение. Для этого в меню Файл выбираем пункт Создать файл или проект. В открывшемся окне (рис. 1.21) в списке слева выбираем пункт Приложение (Qt), а затем справа пункт Приложение Qt Widgets. Нажимаем кнопку Выбрать.
На следующем шаге (рис. 1.22) в поле Название вводим Test , в поле Создать в добавляем путь C:cppprojectsQt . Нажимаем кнопку Далее. На следующем шаге (рис. 1.23) из списка Система сборки выбираем пункт qmake и нажимаем кнопку Далее. На следующем шаге (рис. 1.24) задаем следующие значения:
- в поле Имя класса вводим Widget ;
- из списка Базовый класс выбираем пункт QWidget;
- сбрасываем флажок Создать форму.
На следующем шаге (рис. 1.25) нажимаем кнопку Далее. На следующем шаге (рис. 1.26) устанавливаем флажок Desktop Qt 6.1.0 MinGW 64-bit. Нажимаем кнопку Подробнее и изменяем пути по умолчанию. В поле Отладка вводим значение C:cppprojectsQtTest-Debug , а в поле Выпуск — значение C:cppprojectsQtTest-Release . Нажимаем кнопку Далее. На следующем шаге (рис.
1.27) нажимаем кнопку Завершить.
Рис. 1.21. Создание оконного приложения. Шаг 1
Рис. 1.22. Создание оконного приложения. Шаг 2
Рис. 1.23. Создание оконного приложения. Шаг 3
Рис. 1.24. Создание оконного приложения. Шаг 4
Рис. 1.25. Создание оконного приложения. Шаг 5
Рис. 1.26. Создание оконного приложения. Шаг 6
Рис. 1.27. Создание оконного приложения. Шаг 7
В результате будет создан каталог C:cppprojectsQtTest с файлами проекта. Содержимое файла Test.pro будет выглядеть так:
QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++11 # You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp widget.cpp HEADERS += widget.h # Default rules for deployment. qnx: target.path = /tmp/$$/bin else: unix:!android: target.path = /opt/$$/bin !isEmpty(target.path): INSTALLS += target
При изучении языков и технологий принято начинать с программы, выводящей надпись Привет, мир! . Не будем нарушать традицию и создадим окно с приветствием и кнопкой для закрытия окна. В файл C:cppprojectsQtTestmain.cpp добавляем программу из листинга 1.2.
Листинг 1.2. Первая программа на Qt
#include #include #include #include #include int main(int argc, char *argv[]) < QApplication app(argc, argv); QWidget window; window.setWindowTitle(«Первая программа на Qt»); window.resize(300, 70); QLabel *label = new QLabel(«Привет, мир!»); QPushButton *btnQuit = new QPushButton(«); QVBoxLayout *vbox = new QVBoxLayout(); vbox->addWidget(label); vbox->addWidget(btnQuit); window.setLayout(vbox); QObject::connect(btnQuit, SIGNAL(clicked()), window.show(); return app.exec(); >
Чтобы преобразовать текстовый файл main.cpp с программой в исполняемый EXE -файл делаем текущей вкладку с содержимым файла main.cpp и слева сначала выбираем пункт Отладка, а затем нажимаем кнопку Запустить (содержит значок в виде зеленого треугольника) или нажимаем комбинацию клавиш +. Можно также в меню Сборка выбрать пункт Запустить. Если все сделано правильно, то отобразится окно, показанное на рис. 1.28.
Рис. 1.28. Результат выполнения программы
Структура программы
Запускать программу мы научились, теперь рассмотрим код из листинга 1.2 построчно. В первых строках подключаются необходимые заголовочные файлы:
#include #include #include #include #include
Далее определяется функция main() , которая является точкой входа в приложение. Через первый параметр ( argc ) доступно количество аргументов, переданных в командной строке. Следует учитывать, что первым аргументом является название исполняемого файла, поэтому значение параметра argc не может быть меньше единицы. Через второй параметр ( argv ) доступны все аргументы в виде строки (тип char * ). Квадратные скобки после названия второго параметра означают, что доступен массив строк.
QApplication app(argc, argv);
создает объект приложения с помощью класса QApplication . Конструктор этого класса принимает количество и список параметров, переданных в командной строке. Следует помнить, что в программе всегда должен быть объект приложения, причем обязательно только один. Может показаться, что после создания объекта он больше нигде не используется в программе, однако с помощью этого объекта осуществляется управление приложением незаметно для нас. Получить доступ к этому объекту из любого места в программе можно через макрос qApp , который преобразуется в указатель на объект приложения. Например, вывести список параметров, переданных в командной строке, можно так:
qDebug() arguments();
Результат при запуске программы:
QList(«C:\cpp\projectsQt\Test-Debug\debug\Test.exe»)
QWidget window;
создает объект окна с помощью класса QWidget . Этот класс наследуют практически все классы, реализующие компоненты графического интерфейса. Поэтому любой компонент, не имеющий родителя, обладает своим собственным окном.
window.setWindowTitle(«Первая программа на Qt»);
задает текст, который будет выводиться в заголовке окна. Следующая инструкция
window.resize(300, 70);
задает минимальные размеры окна. В первом параметре метода resize() указывается ширина окна, а во втором параметре — высота окна. Следует учитывать, что эти размеры не включают высоту заголовка окна и ширину границ, а также являются рекомендацией, т. е. если компоненты не помещаются, размеры окна будут увеличены.
QLabel *label = new QLabel(«Привет, мир!»);
создает объект надписи. Текст надписи задается в качестве параметра в конструкторе класса QLabel . Обратите внимание на то, что внутри строки мы указали HTML-теги. В данном примере с помощью тега произвели выравнивание текста по центру компонента.
Возможность использования HTML-тегов и CSS-атрибутов является отличительной чертой библиотеки Qt. Например, внутри надписи можно вывести таблицу или отобразить изображение. Это очень удобно.
QPushButton *btnQuit = new QPushButton(«);
создает объект кнопки. Текст, который будет отображен на кнопке, задается в качестве параметра в конструкторе класса QPushButton . Обратите внимание на символ З». Таким образом задаются клавиши быстрого доступа. Если нажать одновременно клавишу и клавишу с буквой, перед которой в строке указан символ
создает вертикальный контейнер. Все компоненты, добавляемые в этот контейнер, будут располагаться друг под другом в порядке добавления. Внутри контейнера автоматически производится подгонка размеров добавляемых компонентов под размеры контейнера. При изменении размеров контейнера будет произведено изменение размеров всех компонентов. В следующих двух инструкциях
vbox->addWidget(label); vbox->addWidget(btnQuit);
с помощью метода addWidget() производится добавление объектов надписи и кнопки в вертикальный контейнер. Так как объект надписи добавляется первым, он будет расположен над кнопкой. При добавлении компонентов в контейнер, они автоматически становятся потомками контейнера.
window.setLayout(vbox);
добавляет контейнер в основное окно с помощью метода setLayout() . Таким образом, контейнер становится потомком основного окна.
QObject::connect(btnQuit, SIGNAL(clicked()),
назначает обработчик сигнала clicked() , который генерируется при нажатии кнопки. В первом параметре статического метода connect() передается указатель на объект, генерирующий сигнал, а во втором параметре — название сигнала с помощью макроса SIGNAL() . В третьем параметре передается указатель на объект, принимающий сигнал, а в четвертом параметре — метод этого объекта, который будет вызван при наступлении события. Метод указывается в качестве параметра макроса SLOT() . Этот метод принято называть слотом. В нашем примере получателем сигнала является объект приложения, доступный также через указатель qApp . При наступлении события будет вызван метод quit() , который завершит работу всего приложения. Пример указания макроса qApp :
QObject::connect(btnQuit, SIGNAL(clicked()), qApp, SLOT(quit()));
window.show();
отображает окно и все компоненты, которые мы ранее добавили. И, наконец, инструкция
return app.exec();
запускает бесконечный цикл обработки событий. Инструкции, расположенные после вызова метода exec() , будут выполнены только после завершения работы приложения. Так как результат выполнения метода exec() мы возвращаем из функции main() , дальнейшее выполнение программы будет прекращено, а код возврата передан операционной системе.
Учебник C++ (Qt Creator и MinGW) в формате PDF
Помощь сайту
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов
Источник: xn--e1akicaccic2c.xn--p1ai