1
0
forked from BRT/arc
arc/main.cpp
slava c1b8d0c23c Add menu navigation and cleanup main.cpp code
Introduced a navigation menu with actions "Окно 1" and "Окно 2" in `MainWindow`. Cleaned up commented-out code and adjusted formatting in `main.cpp` for clarity.
2025-04-22 10:18:52 +07:00

73 lines
3.2 KiB
C++

#include <QApplication>
#include <QThread>
#include "dao/AccountDAO.h"
#include "views/MainWindow.h"
#include "database/DatabaseManager.h"
#include "database/dao/CommonDataDAO.h"
#include "db/AccountInfoScreener.h"
#include "services/DeviceScreener.h"
void setupWorkerAndThread(QCoreApplication &app) {
auto *thread = new QThread;
auto *deviceScreenerWorker = new DeviceScreener;
// Перемещаем worker в новый поток thread.
// Это значит, что все слоты worker, вызываемые через connect(), теперь будут исполняться в этом фоне-потоке.
deviceScreenerWorker->moveToThread(thread);
// Когда поток запустится, автоматически вызовется worker->start() внутри фонового потока.
QObject::connect(thread, &QThread::started, deviceScreenerWorker, &DeviceScreener::start);
// 🔁 Эти 3 строки делают автоматическую зачистку:
// Когда worker закончит работу (emit finished()), мы:
// - останавливаем поток (thread->quit())
// - удаляем worker (deleteLater)
// - удаляем thread (deleteLater)
// Это защищает от утечек памяти и оставшихся потоков после завершения.
QObject::connect(deviceScreenerWorker, &DeviceScreener::finished, thread, &QThread::quit);
QObject::connect(deviceScreenerWorker, &DeviceScreener::finished, deviceScreenerWorker, &QObject::deleteLater);
QObject::connect(thread, &QThread::finished, thread, &QThread::deleteLater);
// Когда пользователь закрывает приложение (Ctrl+C, exit() и т.п.), мы вызываем worker->stop() — ты сам пишешь, что в этом методе.
//Обычно он просто ставит флаг m_running = false, чтобы остановить бесконечный цикл в start()
QObject::connect(&app, &QCoreApplication::aboutToQuit, [=]() {
deviceScreenerWorker->stop();
});
thread->start();
}
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// QList<Card> cards = AccountInfoScreener::parseCardData(QByteArray());
// for (const Card &card: cards) {
// AccountInfo info;
// info.deviceId = "6edc4a47";
// info.appName = "bank";
// info.cardName = card.name;
// info.amount = card.amount;
// info.description = card.description;
// info.status = "active";
// info.updateTime = QDateTime::currentDateTime();
// qDebug() << "Account info: " << AccountDAO::upsertAccount(info);
// }
// setupWorkerAndThread(app);
//
// const QDateTime current = QDateTime::currentDateTimeUtc();
// qDebug() << "Обновление lastScan:" << CommonDataDAO::updateLastScan(current);
//
// const QDateTime savedTime = CommonDataDAO::getLastScan();
// qDebug() << "Сохранившееся время:" << savedTime.toString();
//
//
MainWindow window;
window.show();
return app.exec();
}