Калькулятор на D с графической библиотекой QtE5

Калькулятор на D с графической библиотекой QtE5

Привет, друзья! Сегодня мы погрузимся в увлекательный мир программирования на языке D с использованием графической библиотеки QtE5. Если вы когда-нибудь задумывались о создании собственного графического приложения, например, калькулятора, то эта статья для вас. Калькулятор — это отличное стартовое приложение для тех, кто хочет научиться работать с графическими интерфейсами. Он не слишком сложен, но в то же время позволяет понять основные принципы работы с кнопками, текстовыми полями и логикой обработки пользовательского ввода.

Создание интерфейса калькулятора

Разработка макета

Первый шаг в создании нашего калькулятора — это разработка его макета. Мы создадим простое окно с кнопками для цифр, операций и дисплеем для отображения ввода и результата.

Создайте файл main.d и откройте его в вашем текстовом редакторе. Начнём с создания основного окна:

import std.stdio;
import qte5;

class Calculator : QWidget {
    this() {
        super();

        // Создаем сетку для размещения элементов
        auto grid = new QGridLayout(this);

        // Создаем дисплей
        auto display = new QLineEdit();
        grid.addWidget(display, 0, 0, 1, 4);

        // Создаем кнопки цифр и операций
        string[] buttons = [
            "7", "8", "9", "/",
            "4", "5", "6", "*",
            "1", "2", "3", "-",
            "0", ".", "=", "+"
        ];

        int pos = 0;
        foreach (i; 1 .. 5) {
            foreach (j; 0 .. 4) {
                auto button = new QPushButton(buttons[pos++]);
                grid.addWidget(button, i, j);
            }
        }

        setLayout(grid);
        setWindowTitle("Калькулятор на D с Qt5");
    }
}

void main(string[] args) {
    QApplication app = new QApplication(args);
    auto calculator = new Calculator();
    calculator.show();
    app.exec();
}

Пояснение кода

Этот код создает простое окно с сеткой (QGridLayout), в которой размещены кнопки и дисплей. Сначала создается дисплей, который добавляется в первую строку сетки. Затем создаются кнопки с цифрами и операциями, которые равномерно распределяются по остальным строкам и столбцам.

Логика калькулятора

Теперь, когда у нас есть интерфейс, нам нужно добавить логику для обработки нажатий кнопок и выполнения вычислений.

Обработка нажатий кнопок

Для обработки нажатий кнопок мы создадим слоты и сигналы, чтобы связывать действия с кнопками. Добавьте следующие методы в класс Calculator:

import std.string;

class Calculator : QWidget {
    private QLineEdit display;
    private string currentInput = "";
    private double lastResult = 0.0;
    private string lastOperator = "";

    this() {
        super();

        auto grid = new QGridLayout(this);
        display = new QLineEdit();
        grid.addWidget(display, 0, 0, 1, 4);

        string[] buttons = [
            "7", "8", "9", "/",
            "4", "5", "6", "*",
            "1", "2", "3", "-",
            "0", ".", "=", "+"
        ];

        int pos = 0;
        foreach (i; 1 .. 5) {
            foreach (j; 0 .. 4) {
                auto button = new QPushButton(buttons[pos++]);
                grid.addWidget(button, i, j);
                button.connect!"clicked"(() => onButtonClicked(button.text));
            }
        }

        setLayout(grid);
        setWindowTitle("Калькулятор на D с Qt5");
    }

    void onButtonClicked(string buttonText) {
        if (buttonText == "=") {
            calculate();
        } else if (buttonText == "/" || buttonText == "*" || buttonText == "-" || buttonText == "+") {
            if (currentInput.length > 0) {
                lastResult = parse!double(currentInput);
                currentInput = "";
            }
            lastOperator = buttonText;
        } else {
            currentInput ~= buttonText;
            display.setText(currentInput);
        }
    }

    void calculate() {
        double currentNumber = parse!double(currentInput);
        double result = lastResult;

        switch (lastOperator) {
            case "/": result /= currentNumber; break;
            case "*": result *= currentNumber; break;
            case "-": result -= currentNumber; break;
            case "+": result += currentNumber; break;
        }

        display.setText(to!string(result));
        currentInput = "";
        lastResult = result;
    }
}

Пояснение кода

Здесь мы добавили переменные для хранения текущего ввода (currentInput), последнего результата (lastResult) и последнего оператора (lastOperator). Метод onButtonClicked обрабатывает нажатия кнопок и обновляет состояние переменных. Когда нажимается кнопка «=», вызывается метод calculate, который выполняет соответствующее вычисление на основе последнего оператора и текущего ввода.

Вот и всё! Мы создали простой калькулятор на языке программирования D с использованием графической библиотеки QtE5. Теперь у вас есть основа, которую вы можете развивать и улучшать. Вы можете добавить поддержку более сложных вычислений, улучшить интерфейс или интегрировать другие функции.


Карпов Ярослав

Автор статьи:

Обновлено:

24.05.2024


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *