PowerModeler/include/tableEditModel.h

62 lines
1.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef TABLEEDITMODEL_H
#define TABLEEDITMODEL_H
/**
* @brief 用来加载显示数据库中数据表的Model类
*
* 基本功能包括:
* 1、可以自定义显示数据表中的哪些列
* 2、可以分页显示并自定义每页展示数量
* 3、编辑的数据可以突出展示如加粗、改色
* 4、最前方加入一个用于展示行号的列行号从1开始
* 5、点击行号列可以实现选中标识通过icon
* 6、哪一行被编辑改行的行号指示可以加*进行标识
*
*/
#include <QSqlTableModel>
#include <QSqlRecord>
class TableEditModel : public QSqlTableModel
{
Q_OBJECT
public:
explicit TableEditModel(QObject* parent = nullptr, const QSqlDatabase& db = QSqlDatabase(), const QStringList &visibleColumns = {});
~TableEditModel();
QVariant data(const QModelIndex& index, int role) const override;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
//分页控制
void setPageSize(int);
int pageSize() const;
void setCurrentPage(int);
int currentPage() const;
int totalPages() const;
//展示列控制
void setVisibleColumns(const QStringList& columns);
protected:
QString selectStatement() const override; //调用select()时会使用该函数重写后返回的语句
private:
struct EditRecord //编辑记录
{
QSqlRecord original;
QSqlRecord modified;
bool isNew = false;
bool isDeleted = false;
};
int m_pageSize;
int m_currentPage;
int m_totalRecords;
QStringList m_visibleColumns;
QHash<int, EditRecord> m_editCache; //key:当前页中的row
};
#endif //TABLEEDITMODEL_H