Files
cinema-ticket-management-sy…/ui/models/base_sql_table_model.h
T

68 lines
1.7 KiB
C++
Raw Normal View History

2026-07-12 14:34:52 +04:00
#ifndef BASE_SQL_TABLE_MODEL_H
#define BASE_SQL_TABLE_MODEL_H
#include "table_info_sqlite.h"
#include <QSqlRelationalTableModel>
class BaseSqlTableModel : public QSqlRelationalTableModel {
Q_OBJECT
private:
TableInfoSQLite tableInfo_;
public:
explicit BaseSqlTableModel(QObject *parent = nullptr,
QSqlDatabase database = QSqlDatabase());
virtual ~BaseSqlTableModel() = default;
virtual QVariant data(const QModelIndex &index,
int role = Qt::DisplayRole) const override;
virtual void setTable(const QString &databaseTableName) override;
virtual inline QString columnName(int index) const;
virtual inline QStringList columnNames() const;
virtual inline bool isCompleteDatabaseFiltering() const = 0;
virtual inline int columnIndex(const QString &columnName) const;
void resetFilter();
void setMultiColumnFilter(const QString &filter);
protected:
virtual QString createMultiColumnFilter(const QString &filter) const;
public slots:
// WARNING: I was too lazy and decided that I could do with one slot
// Refreshes the whole table
bool refreshAll();
// Here can be additional slots
// refreshByRowNumber(int row) = 0;
// refreshRange(int from, int to) = 0;
// refreshByFilter(QString filter) = 0;
// etc
private:
QString createUpdateFilterMessage(const QString &filter) const;
};
QString BaseSqlTableModel::columnName(int index) const {
return tableInfo_.columnName(index);
}
QStringList BaseSqlTableModel::columnNames() const {
return tableInfo_.columnNames();
}
int BaseSqlTableModel::columnIndex(const QString &columnName) const {
return tableInfo_.columnIndex(columnName);
}
#endif // BASE_SQL_TABLE_MODEL_H