C++
Как сделать интерфейс в приложении на C++: простой вариант с меню
Если вы только начинаете, не надо сразу бросаться в Qt, WinAPI или сложные графические окна. Первый интерфейс в C++ лучше сделать как консольное меню: пользователь видит варианты, вводит номер, программа выполняет действие и снова показывает меню
Такой интерфейс не выглядит как отдельное окно Windows, зато он учит главному: разделять команды, обрабатывать выбор пользователя и не превращать main() в длинную кашу
Что получится
Сделаем маленькое приложение со списком задач:
1. Показать задачи
2. Добавить тестовую задачу
0. Выход
Ваш выбор:
Пока без сохранения в файл и без базы данных. Главное — каркас интерфейса, который потом можно расширить
Полный пример
Создайте файл menu.cpp:
#include <iostream>
#include <string>
#include <vector>
void showTasks(const std::vector<std::string>& tasks) {
if (tasks.empty()) {
std::cout << "Список задач пуст" << std::endl;
return;
}
for (int i = 0; i < static_cast<int>(tasks.size()); ++i) {
std::cout << i + 1 << ". " << tasks[i] << std::endl;
}
}
void showMenu() {
std::cout << "\n=== Меню ===" << std::endl;
std::cout << "1. Показать задачи" << std::endl;
std::cout << "2. Добавить тестовую задачу" << std::endl;
std::cout << "0. Выход" << std::endl;
std::cout << "Ваш выбор: ";
}
int main() {
std::vector<std::string> tasks;
int choice = -1;
while (choice != 0) {
showMenu();
std::cin >> choice;
switch (choice) {
case 1:
showTasks(tasks);
break;
case 2:
tasks.push_back("Разобрать C++ интерфейс");
std::cout << "Задача добавлена" << std::endl;
break;
case 0:
std::cout << "Выход" << std::endl;
break;
default:
std::cout << "Неизвестная команда" << std::endl;
break;
}
}
return 0;
}
Сборка:
g++ menu.cpp -o menu
./menu
На Windows:
g++ menu.cpp -o menu.exe
.\menu.exe
Почему это уже интерфейс
Интерфейс — это не обязательно красивая кнопка. Это способ, которым пользователь управляет программой. В нашем примере есть:
- экран меню;
- понятные варианты действий;
- ввод команды;
- реакция на выбор;
- цикл, который возвращает пользователя в меню.
На этом же принципе строятся и графические интерфейсы: кнопка тоже вызывает обработчик действия, просто пользователь нажимает мышью, а не вводит номер
Как сделать код аккуратнее
Обратите внимание: showMenu() только показывает меню, а showTasks() только выводит задачи. Это лучше, чем держать весь код внутри main()
Когда программа вырастет, можно добавить функции:
void addTask(std::vector<std::string>& tasks) {
std::string task;
std::cout << "Введите задачу: ";
std::cin.ignore();
std::getline(std::cin, task);
tasks.push_back(task);
}
Тогда пункт меню 2 будет добавлять реальный текст пользователя, а не тестовую задачу
Частые ошибки
Писать весь интерфейс в main
На первых 20 строках это терпимо. На 200 строках вы потеряете контроль. Делите интерфейс на функции
Не обрабатывать неправильный ввод
Если пользователь ввел 9, программа должна сказать, что команда неизвестна. Если пользователь ввел текст вместо числа, понадобится дополнительная очистка cin, но для первого урока достаточно понять саму идею
Сразу выбирать сложный GUI
Qt, wxWidgets, WinAPI и ImGui полезны, но сначала разберитесь с логикой меню. Иначе вы будете одновременно учить C++, сборку, события, окна и чужую библиотеку
Как развить пример
Добавьте пункты:
- удалить задачу по номеру;
- отметить задачу выполненной;
- сохранить задачи в файл;
- загрузить задачи при запуске.
Так простой текстовый интерфейс станет мини-приложением, а не просто учебным меню
Что почитать дальше по C++
Если нужен общий маршрут по теме, откройте рубрику C++. Для соседних задач пригодятся эти разборы:
- Как написать простой поисковик на C++
- Как сверстать меню на C++ при помощи Figma: дизайн, спецификация и перенос в код
- Как сверстать меню на C++: консольное меню, GUI и правильная структура
- Как сделать все строки одинакового размера в C++: setw, пробелы и обрезка