Первая программа на Qt:
Qt – это мощный инструментарий, имеющий множество способов для воплощения задумок программиста в жизнь. Давайте начнём его освоение с самой первой программы
Итак, у вас под рукой имеется среда разработки QtCreator
с подключенным к ней компилятором(например MinGW
). В среде разработки выбираем Другой проект-> Проект с поддиректориями.
Название: cppstudio
. Здесь для удобства мы будем хранить все приложения взятые с сайта. Создадим здесь под проект QWidget
с название lesson_1
и удаляем в нём файлы mainwindows.h
, mainwindows.cpp
, и форму.
Переписываем код программы печатающей на экран «Привет мир!» в main.cpp
:
#include <QApplication> #include <QHBoxLayout> #include <QLabel> #include <QPushButton> 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()),&qapp,SLOT(quit())); hlayout->addWidget(label); hlayout->addWidget(butt); mainWindow->setLayout(hlayout); mainWindow->show(); return qapp.exec(); }
Давайте разберём код программы:
В строчках 1-4 идёт подключение нужных заголовочных файлов.
В qt
за графический интерфейс пользователя отвечает семейство классов <QWidget>
. Так как нам понадобятся виджеты, то в первую очередь прописываем нужные библиотеки(QLabel
, QPushButton
).
#include <QApplication> 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()),&qapp,SLOT(quit()));
Через метод класса QObjekt::connect(&Отправитель,SIGNAL(сигнал()),получатель,SLOT(слот())) реализуется механизм сигналов и слотов. В данном случае при нажатии кнопки приложения генерируется сигнал clicked(), который активирует слот quit() и приводит к закрытию приложения.
layout->addWidget(label); layout->addWidget(butt);
Для расположения и компоновки виджетов “в сетке”, горизонтально или вертикально используются классы QHBoxLayout, QGridLayout, QHBoxLayout. Метод-член addWidget добавляет их в менеджер компоновки.
mainWindow->setLayout(hlayout); mainWindow->show();
Последние строки устанавливают окну класс компоновки с его виджетами и заставляют его стать видимым.
В итоге у вас должна получится программа:
Комментарии
tenebris
Спасибо за отзыв, прочту о новом синтаксисе, опишу его в следующей статье.
equeim
Я так понял, статьи пишутся на примере Qt5? Тогда лучше использовать новый синтаксис сигналов и слотов:
Подробнее:
https://wiki.qt.io/New_Signal_Slot_Syntax
http://doc.qt.io/qt-5/signalsandslots.html