QT QML 开发TableView 展示sqlite3数据库数据,并且在UI层实现 增删表,增减行,编辑数据实时保存到数据库。并提供数据库导入导出execl功能。

实时效果如图

静态图片如下:

一、UI层使用QML的TableView 组件, 加载C++写的数据model,  然后表格 各列都可以使用不同的代理,  比如说直接编辑,下拉列表选择,选中组件。 还有增加行,删除行按钮

二、C++ 继承 QSqlRelationalTableModel 实现自定义数据model,在里面打开sqlite3数据库,  实现对应的重写接口,使UI层可以读取数据。对UI层额外实现加减行接口,

datatablemodel.h

#ifndef OFFQIMIETABLEMODEL_H
#define OFFQIMIETABLEMODEL_H

#include <QSqlRelationalTableModel>
#include <QQmlParserStatus>
#include <QItemSelectionModel>

#include <QList>

#include "offsql.h"
#include "projectparamanger.h"

class Q_DECL_EXPORT OffQiMieTableModel : public QSqlRelationalTableModel,  public QQmlParserStatus
{
    Q_OBJECT

    Q_PROPERTY(QString database READ databaseName WRITE setDatabaseName NOTIFY databaseNameChanged)
    Q_PROPERTY(QString table READ tableName WRITE setTable NOTIFY tableChanged)
    Q_PROPERTY(QStringList horHeader READ getHorHeader WRITE setHorHeader NOTIFY horHeaderChanged)

public:
    explicit OffQiMieTableModel(QObject *parent = nullptr);
    ~OffQiMieTableModel() override;

    void classBegin() override;
    void componentComplete() override;

    QHash<int, QByteArray> roleNames() const override;
    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;

    // 表头
    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
    bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;

    void setDatabaseName(const QString &fileName);
    QString databaseName() const;
    void setTable(const QString &tableName) override;
    QString tableName() const;

    QStringList getHorHeader() const;
    void setHorHeader(const QStringList &header);

    QString m_databaseName;
    QString m_tableName;
    bool m_completed = false;
    mutable QHash<int, QByteArray> m_roles;

    // 横项表头
    QList<QString> m_horHeaderList;

signals:
    void databaseNameChanged();
    void tableChanged();
    void horHeaderChanged();

public slots:
    int add();
    bool remove(int row);
    void ASCSort();

private:
    bool tableExists(const QString &tableName);
    void createTable(const QString &tableName,const QString &createSql,const QString &data);
    void createTable(const QString &tableName,const QString &createSql);
    void createTableData(const QString &tableName,const QString &initdata);

    void dropTable(const QString &tableName, const QString &dropSql);
    void insertTableInitData();

    void initTables();
};
#endif // OFFQIMIETABLEMODEL_H

三、导入导出EXECL表格功能使用 qtxlsx 库源码,解决在QT6的编译报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值