Personal tools
You are here: Home Members ylitvinov's Home 15-44 C++ с Qt, весна 2016

C++ с Qt, весна 2016

Материалы дополнительной пары про Qt

Домашние задания:

В табличке:
пусто - задачу не получал или не смотрел
0 - задача не зачтена
0.5 - в целом правильно, но надо кое-что поправить
1 - задача зачтена



Чтобы попасть в табличку, нужно сделать и выложить хоть что-то

Презентации и конспекты:

Введение в Qt (презентация)

Сцена (презентация)
Сцена (конспект)
Исходники про сцену

Консоль и система сборки (презентация)
Консоль и система сборки (конспект)

Многопоточное программирование на Qt (презентация)
Многопоточное программирование на Qt (конспект)

Сетевое программирование на Qt (презентация)
Сетевое программирование на Qt (конспект)

Условия задач:

1. 02.03.2016

Сделать на выбор одно из следующего:
  1. Аналоговые часы, выглядящие как http://doc.qt.io/qt-5/images/analogclock-example.png. Пользоваться QTimer для того, чтобы обновлять показания часов каждую секунду, QTime для того, чтобы узнавать текущее время и рисовать переопределением метода paintEvent главного окна (плюс QTransform, чтобы не заниматься тригонометрией). У кого совсем не получается, можно посмотреть пример http://doc.qt.io/qt-5/qtwidgets-widgets-analogclock-example.html, но сначала лучше не подглядывать. Пользоваться другими разделами справки можно (и нужно).
  2. Сделать веб-браузер, который бы умел отображать страницу по указанному адресу. Для отображения страницы можно использовать Qt WebKit (класс QWebView), не забудьте прописать QT += webkitwidgets в .pro-файле. Должно быть поле, куда можно ввести адрес, кнопка "Обновить", кнопки "Вперёд", "Назад", "Стоп" и возможность ходить по линкам. У кого совсем не получится, можно посмотреть на пример http://doc.qt.io/qt-5/qtwebkitexamples-webkitwidgets-fancybrowser-example.html, но, опять-таки, сначала надо использовать только справку.

2. 09.03.2016

  1. Сделать графический редактор, который позволяет добавлять на сцену квадрат, круг и линию и перемещать их по сцене. Должна быть возможность сохранить результат как .png-файл.

3. 16.03.2016

  1. Без использования Qt Creator написать .pro-файл для любого из проектов предыдущего задания и собрать его из консоли. При этом сделать так, чтобы заголовочные файлы лежали в папке include, исходники --- в src, объектные файлы и автогенерированные временные файлы при сборке клались в папку obj, а собраный бинарник --- в папку bin. Выложить сам .pro-файл и скриншот успешной сборки в консоли.

4. 30.03.2016

  1. Есть список из миллиона случайных чисел, надо возвести все его элементы в квадрат --- "как обычно" и с помощью QtConcurrent. Сравнить времена работы в первом и во втором случае. Будет полезен класс QElapsedTimer.
  2. Не пользуясь QtConcurrent, сложить все числа в заданном списке в 10 потоков, вывести результат и затраченное на это время. Для сравнения сделать то же самое в основном потоке.

5. 06.04.2016

  1. Сделать сетевые крестики-нолики. Приложение должно позволять играть в крестики-нолики на поле 3 на 3 с человеком по сети, одно и то же приложение должно мочь выступать и в роли клиента, и в роли сервера. Если оно клиент, должно быть можно указать IP-адрес и порт сервера, если оно сервер, должно быть можно просмотреть текущий IP-адрес и порт. Всё сетевое взаимодействие должно выполняться в отдельных потоках (хотя проще начать с однопоточной реализации).

Мегазадачи на остаток семестра

  • Сетевой морской бой со статистикой побед/поражений. Должно быть основное окно игры (два поля 10 на 10, со своими и с чужими кораблями), окно расстановки кораблей (одно поле 10 на 10 и кнопки, позволяющие выбрать корабль, развернуть корабль и поставить его на поле), окно создания игры, где можно ввести ник и адрес сервера и подключиться, окно просмотра статистики побед в виде таблицы ник --- количество выигранных матчей --- всего матчей. Всё сетевое взаимодействие должно быть в отдельных потоках, статистику надо хранить в БД. Предполагается команда из трёх-четырёх человек на задачу (пользовательский интерфейс, бизнес-логика, сетевой код (возможно, dedicated server), взаимодействие с БД).
  • Сетевой чатик наподобие Jabber или Telegram. Должно быть окно регистрации, контакт-лист с возможностью добавления и удаления контактов и окно чата. Список контактов надо хранить в БД, сетевое взаиможействие должно выполняться в отдельных потоках. Предполагается команда из трёх-пяти человек на задачу (пользовательский интерфейс, бизнес-логика, сетевой код, взаимодействие с БД, возможно, поддержка протокола XMPP).
  • Коллаборативный векторный графический редактор. Должно быть можно рисовать линии, прямоугольники, круги и т.д. (особо рекомендую http://doc.qt.io/qt-5/qpainterpath.html#cubicTo c http://doc.qt.io/qt-5/qgraphicspathitem.html), менять их размеры, перемещать и удалять. Причём, над одним изображением должны иметь возможность по сети работать сразу несколько пользователей --- один выбирается как сервер, остальные коннектятся к нему и тут же получают текущую картинку, после чего любое изменение, вносимое одним пользователем, распространяется на всех. Элементарные фигуры надо хранить в базе данных, т.е. формат сохранения --- файл с БД. Всё сетевое взаимодействие должно быть... ну вы поняли. Предполагается команда из четырёх-шести человек на задачу (общая архитектура, редактирование картинки, сетевой код, код работы с БД, пользовательский интерфейс).
Document Actions