Разработка Gui на Qt (PySide)
Установка, ссылки и документация
Python – модуль PySide
Необходимо установить модуль PySide6 при помощи pip install. В системе Linux попробуйте установить пакет из системного репозитория.
Сайт
Документация (Modules API)
C++
Конспекты уроков по работе с Qt
Документация на Qt-6
Установщик Qt для Windows. При установке выберите "Qt 6.6 for desktop development", и вы получите минимально работающий комплект Qt 6.6. Подробнее смотрите в инструкции по установке. Также для скачивания необходимо использовать VPN или настроить прокси в установщике по этой инструкции.
Для установки в Linux нужно пользоваться пакетами из дистрибутива вашей системы (VPN и прокси не нужны), можно использовать версию 5 Qt.
Как сдавать задачи
В задаче 0 надо сдать скриншот в формате PNG. Остальные задачи существуют в двух вариантах. Вариант 1 – на Python PySide6. Вариант 2 – на С++ и Qt.
Вариант сдачи заданий установлен для каждого учащегося. По умолчанию всем проставлен вариант 1, но может быть заменён по просьбе (или если вы сдадите в задании 0 скриншот QtCreator).
Python
Всё решение, вместе со всеми классами, должно быть в одном файле.
С++
Необходимо создать проект в QtCreator. Используйте систему сборки qmake (а не cmake по умолчанию).
Удалите из проекта весь мусор (результат сборки, компиляции).
Создайте zip-архив с проектом. Необходимо архивировать именно каталог с проектом, а не только файлы внутри него. Внутри каталога должны быть файлы *.pro, *.cpp, *.h.
Для создания архива нельзя использовать встроенный архиватор Windows, т.к. он не создает в оглавлении архива запись для каталога с проектом, а создаёт только записи для файлов.
Задание 0
Установите дома PySide6 (для С++ — Qt и Qt Creator), сделайте скриншот запущенной среды разработки и запущенного приложения, использующего библиотеку PySide6 (Qt). Скриншот сохранить в формате PNG и сдайте в тестирующую систему.
Задание A
Видео
Пример на Python
Пример на C++
Добавьте в приложение три кнопки: увеличение значения на 1, уменьшение на 1 и сброса значения. Нажатие на эти кнопки должно приводить к изменению значения в классе MyCounter и всех элементах управления на экране (LineEdit, SpinBox, Slider).
Задание B
Видео с урока
Реализация игры Быки и коровы.
Функциональность приложения. После запуска программы компьютер генерирует случайное 4-значное число (все цифры различны, начинается не с нуля). Число выводится на стандартный вывод (функция print в python, cout в С++), в отладочных целях. Главное окно приложения содержит поле ввода (QLineEdit) для ввода задуманного числа, кнопку "Проверить" (QPushButton) и строчку для вывода сообщения (QLabel). При нажатии на кнопку производится проверка введенного числа, и либо выводится сообщение о том, что число некорректно, либо выводится количество быков и коров для введенного числа. Сообщения выводятся путем изменения текста у объекта QLabel.
Все надписи должны быть на русском языке. Файл должен быть сохранён в кодировке UTF-8.
В pythоn поставьте в начало файла строчку
# -*- coding: utf-8 -*-
В C++ используйте среду QtCreator, она будет сохранять файлы в кодировке UTF-8.
Задание C
Функциональность приложения – полноценный игровой режим с началом новой игры и подсчётом числа ходов.
В окне две кнопки "Угадать" и "Сдаться". Также ведется подсчет числа попыток, за которое было угадано число. Не учитывается в качестве попытки: ввод некорректного числа, ввод числа, совпадающего с тем числом, которое было введено последним перед этим.
При нажатии на кнопку "Угадать" идет проверка числа и выводится сообщение о результате проверки. Если в результате проверки было угадано задуманное число, то выводится сообщение об этом, выводится число ходов и на кнопке "Сдаться" текст меняется на "Новая игра", а нажатия на кнопку "Угадать" игнорируются (можно сделать кнопку неактивной). После нажатия на кнопку "Новая игра" задумывается новое число, текст кнопки меняется на "Сдаться" и все начинается заново.
При нажатии на кнопку "Сдаться" выводится задуманное число, после чего пользователю предлагается начать новую игру нажатием на кнопку "Новая игра".
Слова "быки" и "коровы" должны склоняться по правилам русского языка, например, "1 бык, 2 коровы"
После начала новой игры информация о предыдущей игре из окна приложения должна быть убрана.
Задание D
Добавьте в приложение виджет, в котором будут храниться ходы, сделанные игроком. Для этого используйте виджет QTableView (документация Python, С++).
Нужно хранить только зачтённые ходы. При начале новой игры таблица результатов должна очищаться.
Задание E
Добавьте в приложение хранение таблицы результатов лучших игроков (угадавших за минимальное число ходов). Должно храниться пять лучших результатов. Новый игрок добавляется в таблицу результатов, если в таблице результатов менее 5 лучших результатов или если в таблице результатов есть результат со строго большим количеством ходов, чем у текущего игрока.
При удачном окончании игры (если игрок будет добавлен в таблицу результатов), приложение запрашивает имя игрока (это удобно делать при помощи QInputDialog (документация Python, С++), сохраняет его в файле с лучшими результатами. Должна быть возможность просмотра лучших результатов, можно при помощи QMessageBox (документация Python, (https://doc.qt.io/qt-6/qmessagebox.html С++))). Выдача лучших результатов – в порядке неубывания числа ходов, использованных при отгадывании.
Программа должна корректно работать как при наличии, так и при отсутствии таблицы результатов. Если файла с результатами не существует, то его нужно создать. Чтобы проверить корректность открытия файла можно использовать метод is_open у файлового потока в C++ или обработку исключений.
Хорошая идея хранить таблицу результатов в JSON.