#ifndef TABLEEDITMODEL_H #define TABLEEDITMODEL_H /** * @brief 用来加载显示数据库中数据表的Model类 * * 基本功能包括: * 1、可以自定义显示数据表中的哪些列 * 2、可以分页显示并自定义每页展示数量 * 3、编辑的数据可以突出展示(如加粗、改色) * 4、最前方加入一个用于展示行号的列(行号从1开始) * 5、点击行号列可以实现选中标识(通过icon) * 6、哪一行被编辑,改行的行号指示可以加*进行标识 * */ #include #include 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 m_editCache; //key:当前页中的row }; #endif //TABLEEDITMODEL_H