Ну попробую и я сделать небольшой цикл статей по QT. Сильно не пинайте потому, что я только начал учить QT :)
Вступление
Qt — кросс-платформенный инструментарий разработки ПО на языке программирования C++. Есть также «привязки» ко многим другим языкам программирования: Python — PyQt, Ruby — QtRuby, Java — Qt Jambi, PHP — PHP-Qt и другие.
Позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путём простой компиляции программы для каждой ОС без изменения исходного кода. Включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. Qt является полностью объектно-ориентированным, легко расширяемым и поддерживающим технику компонентного программирования.
Существуют версии библиотеки для Microsoft Windows, систем класса UNIX с графической подсистемой X11, Mac OS X, Microsoft Windows CE, встраиваемых Linux-систем и платформы S60.
Установка не должна вызвать сложностей. Запускаем QT Creator, создаем новый консольный проект(File->New) назовем например «demo01»(в Windows отказался компилироваться проект когда в путях была кириллица). Правим файлы в проекте:
В графическом приложении Qt обязательно должен быть создан один объект QApplication. QApplication управляет ресурсами приложения, например, задавая тип шрифта или курсора.
#include <QPushButton>
Ну думаю понятно, что этот класс описывает. Конечно же кнопку.
#include <QFont>
Этот класс даст возможность управления шрифтами в приложении.
#include <QWidget>
Класс является базовым классом всех виджетов.
int main(int argc, char *argv[])
{
Функция main() является точкой входа в вашу программу. В большинстве случаев при написании приложения Qt, только main() нуждается в определённых, связанных с инициализацией действиях до передачи управления библиотеке Qt, которая уже потом, в свою очередь, сообщает программе о действиях пользователя.
Параметр argc — число аргументов командной строки, а argv — массив этих аргументов. Это — стандартная особенность C++.
QApplication app(argc, argv);
Объект app является экземплятором QApplication. В этой строчке мы его создаем. Мы передаём параметры argc и argv в конструктор QApplication, чтобы он мог обработать стандартные аргументы командной строки (такие как -display при работе с X11). Все переданные аргументы, обработанные Qt, будут удалены из argv, argc уменшится в соответствии с этим. Для получения подробной информации о работе с этими параметрами посмотрите документацию на метод QApplication::argv().
Объект QApplication должен быть создан прежде, чем вы начнете работать с графическим интерфейсом пользователя Qt.
QWidget window;
В этой строчке мы просто создаем экземпляр объекта виджета. Класс QWidget является предком всех объектов пользовательского интерфейса. Виджет — это единица (юнит, атом) пользовательского интерфейса: получая данные от клавиатуры, мышки или какого нибудь события, он видоизменяет свое отображение на экране. Виджет может быть связан со своим родительским классом и виджетами, для которых он является родителем.
Виджет, чей родитель не является виджетом (как например в нашем случае), называют окном. Обычно, окна имеют собственную рамку и эмблему для входа через панель задач, обеспечиваемые системой окна. Виджет без родительского окна — всегда независимое окно. Его позицией на экране при старте управляет оконная система.
window.resize(200, 120);
В этой строчке мы устанавливаем размер окна, 200 пикселей ширина и 120 пикселей высота.
QPushButton quit("Close Window", &window);
Ребёнок родился. Этот экземпляр объекта QPushButton создается как потомок виджета (window). Виджет, который является потомком другого виджета, всегда отображается в пределах окна родительского виджета. Его перемещение ограничено границами родительского окна. Если не задать местоположение виджета, то он будет размещен на позиции (0,0).
quit.setFont(QFont("Times", 18, QFont::Bold));
В этой строчке мы выбираем шрифт для надписи, а также определяем его размер и стиль. Мы можем переопределить шрифт по умолчанию для всего приложения Qt, используя метод QApplication::setFont().
quit.setGeometry(10, 40, 180, 40);
В метод QWidget::setGeometry()передается 4 параметра, первый два это координаты X и Y положения верхней левой границы. Это координаты, которые высчитываются относительно родительского виджета. Следующие параметры являются шириной и высотой виджета. Результатом этой команды будет кнопка, которая имеет координаты верхнего левого окна относительного родительского окна (10,40) и иметь ширину 180 и высоту 40.
QObject::connect() является, возможно, самой главной особенностью Qt. Заметьте что метод connect()является статическим методом в классе QObject. Не перепутайте этот метод с функцией connect(), которая входит в библиотеку для работу с сокетами.
Вызов метода connect() создаёт однонаправленную связь двух объектов Qt (которые наследуют QObject или его потомков). Любой Qt-объект может иметь и сигналы (для отправки сообщений), и слоты (для приёма сообщений). Все виджеты являются Qt-объектами, так как они являются наследниками QWidget, который, в свою очередь, наследует QObject.
Здесь сигнал clicked() кнопки quit соединяется со слотом quit() объекта app, в результате при нажатии кнопки приложение завершает работу. Сигналы испускаются объектом, когда изменяется его внутреннее состояние, и если это может быть интересно его клиентам или владельцу. Только классы, содержащие определения сигналов, и их подклассы могут испускать сигналы. Слот вызывается как только испускается соединенный с ним сигнал. Слоты — это обычные функции C++, они могут вызываться обычным образом; их единственная особенность — это то, что к ним могут быть присоединены сигналы.
window.show();
Когда родительскому виджету указывают стать видимым, это также влияет и на все его потомственные виджеты (за исключением тех, которые явно будут указаны что они не отображаются, используя метод QWidget::hide()).
return app.exec();
}
В этом месте main() передаёт управление Qt. QCoreApplication::exec() вернёт значение, когда приложение закончит работу. (QCoreApplication является базовым классом для QApplication. Он определяет ядро QApplication, функциональность, не связанную с GUI, и может быть использован при разработке приложений без графического интерфейса пользователя).
В методе QCoreApplication::exec() происходит обработка всех пользовательских и системных событий и передача управления соотвествующим виджетам.
Хеппи Энд
Теперь можно скомпилировать нашу программу и запустить ее (Ctrl+R). Вы должны будете увидеть чтото вроде этого )
Жаль, что QtJambi закрыли. А то ведь это похоже единственная библиотека для GUI, которую можно использовать в яве и при этом иметь отзывчивый интерфейс.
Правда, я всё равно использую Jambi =)
Порадовало, что Вы начали объяснение не с Hello World, а чего-то посерьезней.
Но слишком мало материала. Надо было сразу написать побольше.
Жду следущих частей)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Правда, я всё равно использую Jambi =)
Но слишком мало материала. Надо было сразу написать побольше.
Жду следущих частей)