Qt/Readme.md

4.9 KiB
Raw Blame History

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

#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();
}