// countermanager.h #ifndef COUNTERMANAGER_H #define COUNTERMANAGER_H #include #include #include #include "udatabase.h" class CounterManager : public QObject { Q_OBJECT public: struct Counter { QString name; int count; Counter() : count(0) {} Counter(const QString& n, int c = 0) : name(n), count(c) {} bool operator==(const QString& otherName) const { return name == otherName; } }; explicit CounterManager(QObject *parent = nullptr); ~CounterManager(); // Инициализация с базой данных bool initialize(uDataBase *database); // Управление счетчиками bool addCounter(const QString &name, int initialValue = 0); bool removeCounter(const QString &name); bool updateCounter(const QString &oldName, const QString &newName, int newValue); bool incrementCounter(const QString &name, int step = 1); bool decrementCounter(const QString &name, int step = 1); int getCount(const QString &name) const; // Обработка сообщения: увеличивает счётчики, чьи имена встречаются в тексте void processMessage(const QString &message); // Получение всех счётчиков QVector getAllCounters() const { return m_counters; } bool contains(const QString &name) const; // Сохранение/загрузка в БД bool saveToDatabase(); bool loadFromDatabase(); signals: void dataChanged(); void counterAdded(const QString &name, int value); void counterRemoved(const QString &name); void counterUpdated(const QString &oldName, const QString &newName); void counterIncremented(const QString &name, int newValue); private: uDataBase *m_database; QVector m_counters; int findIndex(const QString &name) const; }; #endif // COUNTERMANAGER_H