Привет, друзья! Сегодня мы погрузимся в увлекательный мир программирования на языке 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. Теперь у вас есть основа, которую вы можете развивать и улучшать. Вы можете добавить поддержку более сложных вычислений, улучшить интерфейс или интегрировать другие функции.
Автор статьи:
Обновлено:
Добавить комментарий