Знакомство со средой разработки
Запускаем QtCreator.
Будем использовать английский интерфейс (изменяется через Tools-Options-Environment-General-Language).
Создадим простой проект - через меню File пункт New File Or Project
Появится диалог. В нем нужно выбрать Qt Widget Project и Qt Gui Application. И нажать кнопку Choose.
Запустится мастер нового проекта, где нужно задать параметры. Далее представлен первый шаг этого мастера. На этом шаге необходимо указать существующую директорию, где будет располагаться проект. На изображении отмечено красным, поскольку указанной директории не существует.
Выбираем существующую директорию, где будет располагаться проект и жмем Next. Обратите внимание на имя проекта. FIT9201KOROSTELEV_<имя проекта>. Проекты предназначенные для проверки семинаристом необходимо именовать только так (и архивировать только в zip).
Если среда настроена правильно, то следующий шаг диалога выглядит так. Ничего менять не надо. Просто жмем Next.
Далее шаг, где можно указать базовый класс и имена базовых классов. Используем QMainWindow. Различия между доступными базовыми классами можно узнать тут
Жмем Next. И переходим к шагу "Summary". Тут можно выбрать систему контроля версий, но рассматривать не будем - можно не использовать. При необходимости настроить ее поможет этот документ
Жмем Finish. В итоге, готовый проект простого оконного приложения.
Жмем Ctrl+R (команда Run) или зеленую стрелочку в левом нижнем углу - запускаем наше приложение.
Теперь остается добавить надпись Hello World и изменить заголовок окна. Рассмотрим исходный код из файла main.cpp
Листинг 0.1
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Заголовок окна меняется методом setWindowTitle определенным для QMainWindow
Надпись добавим с помощью компонента QLabel, у которого определим ее через метод setText. Не забываем указать #include <QLabel>
В итоге, файл main.cpp изменили следующим образом
Листинг 0.2
#include <QtGui/QApplication>
#include <QLabel>
#include "mainwindow.h"
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
MainWindow w;// QMainWindow
w.setWindowTitle("Application");
QLabel label(&w);
label.setText("<font color=red>Hello, World!</font>");
w.show();
//
return a.exec();
}
И получили следующий результат.
Основная цель (создать простое оконное приложение) выполнена, но нам, в дальнейшем, потребуется средство для визуализации точек. На лекциях будет рассказаны алгоритмы растеризации, которые вы должны будете реализовать. Результат их работы необходимо будет выводить только попиксельно. Рассмотрим что для этого вам потребуется.
Перерисовка любого qt-окна (QWidget) происходит в методе (virtual) void paintEvent(QPaintEvent*);
До этого мы меняли только файл main.cpp Теперь нам следует изменить mainwindow.h и mainwindow.cpp - метод paintEvent.
В mainwindow.h в описание класса MainWindow добавим метод void paintEvent(QPaintEvent*); В файле mainwindow.cpp напишем реализацию.
Стандартным способом вывода графики в QWidget является использование класса QPainter. Детали производительности различных методов можно прочитать тут
Использовать будем следующий способ. Рисуем изображение с помощью класса QImage - используем метод setPixel Также разрешено использовать метод fill
Далее с помощью QPainter выводи это изображение.
Листинг 0.3
void MainWindow::paintEvent(QPaintEvent*) {
QImage image(32, 32, QImage::Format_RGB888);
image.fill(0xffff0000);
image.setPixel(15, 15, 0xffffffff);
QPainter painter(this);
painter.drawImage(100, 100, image);
}
Не забываем объявлять #include <QPainter> и #include <QImage>
Примерный листинг того, что должно получиться представлено ниже. Для упрощения листинга из кода убрана работа с формой через Qt Designer. Автоматически созданный проект включал файл ui_mainwindow.h, описывающий создание формы mainwindow.ui
Листинг 0.4
#include <QtGui/QApplication>
#include <QLabel>
#include <QPainter>
#include <QMainWindow>
class CMainWindow : public QMainWindow {
//Q_OBJECT
public:
explicit CMainWindow(QWidget *_pParent = NULL) : QMainWindow(_pParent) {
resize(256, 256);
setWindowTitle("Application");
m_Label.setParent(this);
m_Label.setGeometry(QRect(0, 0, 128, 12));
m_Label.setText("<font color=red>Hello, World!</font>");
}
~CMainWindow() {}
//
void paintEvent(QPaintEvent *) {
QImage image(32, 32, QImage::Format_RGB888);
image.fill(0xffff0000);
image.setPixel(15, 15, 0xffffffff);
QPainter painter(this);
painter.drawImage(100, 100, image);
}
private:
QLabel m_Label;
};
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
CMainWindow window;
window.show();
//
return a.exec();
}
Далее представлен результат работы приведенного кода.
Прежде, чем закончить с этим приложением, рассмотрим еще одну деталь - настройки проект. Файлом qt-проекта является .pro файл.
Далее представлен файл простого приложения, созданного мастером проектов.
Листинг 0.5
QT += core gui
TARGET = FIT9201KOROSTELEV_HelloWorld
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
Данный файл используется утилитой qmake при сборке вашего проекта. Подробнее прочитать тут
Самостоятельная работа
0. Тестовый проект на изучение qt. Оценка не ставится, но выполнение является обязательным.
1. Создать проект, рисующий через setPixel график функции sin(x) и оси координат (с делениями - штрихи)
2. Проект должен поддерживать редактирование формы через Qt Designer (.ui файлы)
3. Должны быть кнопки Clear (очистить изображение), Draw Sin (нарисовать синус), Draw Axis (нарисовать оси)
4. Название окна проекта FIT9201SURNAME_<имя проекта>, где SURNAME - ваша фамилия латиницей
5. Проект сдается в виде .zip файла, содержащего все данные проекта, кроме результатов его сборки. Внутри zip-файла находится папка
FIT9201SURNAME_<имя проекта> - имя папки совпадает с именем zip-файла.
* Данный ознакомительный проект можно сдавать по e-mail.