Newer
Older
PagedTableDemo / QPagedTable / QPagedTable.h
tanyue 27 days ago 2 KB 20250717 增加check列
#ifndef QPAGEDTABLE_H
#define QPAGEDTABLE_H

#include <QWidget>
#include <QList>
#include <QMap>
#include <QVariant>
#include <QFrame>
#include <QTableWidget>
#include <QCheckBox>
#include <QRadioButton>
#include <QButtonGroup>

#include "QPagedTablePage.h"
#include "QPagedTableColumn.h"

namespace Ui {
class QPagedTable;
}

class QPagedTable : public QWidget
{
    Q_OBJECT

public:
    explicit QPagedTable(QWidget *parent = nullptr);
    ~QPagedTable();

    enum MultiCheckType {
        NONE,
        RADIO,
        MULTI
    };

    /**
     * 封装API函数
     */
    void initTableWidget();
    void initTableHeader();
    void adjustTableWidth();
    void setColumns(QList<QPagedTableColumn> columnList);
    void setDatas(QList<QMap<QString, QVariant>> pagedDataList);
    void setPage(int pageSize, int currentPage, int totalCount, int totalPage);
    void setPageSize(int pageSize);
    void setTotalCount(int totalCount);

    void setHeaderHeight(int height);
    void setDataRowHeight(int height);
    void setHighlightHeaderSection(bool highlight);
    void setShowVerticalHeader(bool show);
    void setEditTrigger(int trigger);
    void setSelectionBehavior(int behavior);

    void setMultiCheckType(MultiCheckType type);

    QTableWidget * getTableInstance();

private:
    Ui::QPagedTable *ui;

    QPagedTablePage page;
    QList<QPagedTableColumn> columns;
    QList<QMap<QString, QVariant>> datas;

    QStringList headerLabels;
    int fixedWidth = 0;

    /**
     * 表格属性
     *
     */
    int headerHeight = 50;
    int dataRowHeight = 40;
    bool highlightHeaderSection = false;
    bool showVerticalHeader = false;
    int editTrigger = 0;
    int selectionBehavior = 1;

    int frameStyle = QFrame::NoFrame;
    int frameBorderSize = 0;

    int multiCheck = MultiCheckType::NONE;

    QButtonGroup * group;

    void updateTableList();
    QWidget * buildNewCheckWidget();
    QWidget * buildNewRadioWidget();

private slots:
    void on_btnFirst_clicked();
    void on_btnPre_clicked();
    void on_btnNext_clicked();
    void on_btnLast_clicked();

signals:
    void reloadTablePagedData(int currPage);
};

#endif // QPAGEDTABLE_H