Калькулятор с графическим интерфейсом
#include <QApplication>
#include <QWidget>
#include <QGridLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QString>
class Calculator : public QWidget {
public:
Calculator() {
auto *layout = new QGridLayout(this);
display = new QLineEdit();
display->setReadOnly(true);
display->setAlignment(Qt::AlignRight);
layout->addWidget(display, 0, 0, 1, 4);
QString buttons[4][4] = {
{"7","8","9","/"},
{"4","5","6","*"},
{"1","2","3","-"},
{"C","0","=","+"}
};
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
QString text = buttons[i][j];
auto *btn = new QPushButton(text);
layout->addWidget(btn, i + 1, j);
connect(btn, &QPushButton::clicked, this, [=]() {
handleInput(text);
});
}
}
}
private:
QLineEdit *display;
QString current;
void handleInput(const QString &text) {
if (text == "C") {
current.clear();
}
else if (text == "=") {
current = QString::number(evaluate(current));
}
else {
current += text;
}
display->setText(current);
}
double evaluate(const QString &expr) {
// простой парсер: число операция число
QString op;
int pos = -1;
for (int i = 0; i < expr.size(); i++) {
if (QString("+-*/").contains(expr[i])) {
op = expr[i];
pos = i;
break;
}
}
if (pos == -1) return expr.toDouble();
double a = expr.left(pos).toDouble();
double b = expr.mid(pos + 1).toDouble();
if (op == "+") return a + b;
if (op == "-") return a - b;
if (op == "*") return a * b;
if (op == "/") return b != 0 ? a / b : 0;
return 0;
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
Calculator w;
w.setWindowTitle("Calculator");
w.resize(250, 300);
w.show();
return app.exec();
}
Базовый ToDO с графическим интерфейсом
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QListWidget>
#include <QLineEdit>
#include <QPushButton>
#include <QFile>
#include <QTextStream>
#include <QDebug>
class NotesApp : public QWidget {
public:
NotesApp() {
auto *layout = new QVBoxLayout(this);
list = new QListWidget();
input = new QLineEdit();
auto *btnAdd = new QPushButton("Add");
auto *btnDel = new QPushButton("Delete");
auto *btnSave = new QPushButton("Save");
auto *btnLayout = new QHBoxLayout();
btnLayout->addWidget(btnAdd);
btnLayout->addWidget(btnDel);
btnLayout->addWidget(btnSave);
layout->addWidget(list);
layout->addWidget(input);
layout->addLayout(btnLayout);
connect(btnAdd, &QPushButton::clicked, this, &NotesApp::addNote);
connect(btnDel, &QPushButton::clicked, this, &NotesApp::deleteNote);
connect(btnSave, &QPushButton::clicked, this, &NotesApp::saveNotes);
loadNotes();
}
private:
QListWidget *list;
QLineEdit *input;
QString filePath = "/home/lux/Документы/notes.txt";
void addNote() {
QString text = input->text().trimmed();
if (!text.isEmpty()) {
list->addItem(text);
input->clear();
}
}
void deleteNote() {
auto *item = list->currentItem();
if (item) delete item;
}
void saveNotes() {
QFile file(filePath);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
qDebug() << "Ошибка сохранения:" << filePath;
return;
}
QTextStream out(&file);
for (int i = 0; i < list->count(); i++) {
out << list->item(i)->text() << "\n";
}
qDebug() << "Сохранено в:" << filePath;
}
void loadNotes() {
QFile file(filePath);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << "Файл не найден, создаётся новый";
return;
}
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine().trimmed();
if (!line.isEmpty())
list->addItem(line);
}
qDebug() << "Загружено из:" << filePath;
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
NotesApp w;
w.setWindowTitle("Notes App");
w.resize(400, 300);
w.show();
return app.exec();
}
Description