diff --git a/example/example_en_US.ts b/example/example_en_US.ts index e88eb62c..36ff648b 100644 --- a/example/example_en_US.ts +++ b/example/example_en_US.ts @@ -1968,7 +1968,7 @@ Some contents... - + Name @@ -2013,42 +2013,42 @@ Some contents... - + Focus not acquired: Please click any item in the form as the target for insertion! - + Avatar - + Address - + Nickname - + Long String - + Options - + <Previous - + Next> diff --git a/example/example_zh_CN.ts b/example/example_zh_CN.ts index f6d98a5e..8d1b2571 100644 --- a/example/example_zh_CN.ts +++ b/example/example_zh_CN.ts @@ -2110,7 +2110,7 @@ Some contents... - + Name 名称 @@ -2145,42 +2145,42 @@ Some contents... 插入一行 - + Focus not acquired: Please click any item in the form as the target for insertion! 焦点未获取:请点击表格中的任意一项,作为插入的靶点! - + Avatar 头像 - + Address 地址 - + Nickname 昵称 - + Long String 长字符串 - + Options 操作 - + <Previous <上一页 - + Next> 下一页> diff --git a/example/qml/page/T_TableView.qml b/example/qml/page/T_TableView.qml index 8dee3a97..94a7aad0 100644 --- a/example/qml/page/T_TableView.qml +++ b/example/qml/page/T_TableView.qml @@ -468,19 +468,15 @@ FluContentPage{ FluButton{ text: qsTr("Insert a Row") onClicked: { - if(typeof table_view.current !== 'undefined'){ - var index = table_view.currentIndex() - if(index !== -1){ - var testObj = genTestObject() - table_view.insertRow(index,testObj) - } + var index = table_view.currentIndex() + if(index !== -1){ + var testObj = genTestObject() + table_view.insertRow(index,testObj) }else{ showWarning(qsTr("Focus not acquired: Please click any item in the form as the target for insertion!")) } - } } - } } diff --git a/src/FluTableModel.cpp b/src/FluTableModel.cpp new file mode 100644 index 00000000..ac74bd67 --- /dev/null +++ b/src/FluTableModel.cpp @@ -0,0 +1,73 @@ +#include "FluTableModel.h" + +FluTableModel::FluTableModel(QObject *parent) : QAbstractTableModel{parent}{ + +} + +int FluTableModel::rowCount(const QModelIndex &parent) const { + return _rows.count(); +} + +int FluTableModel::columnCount(const QModelIndex &parent) const { + return this->_columnSource.size(); +} + +QVariant FluTableModel::data(const QModelIndex &index, int role) const { + switch (role) { + case FluTableModel::RowModel: + return QVariant::fromValue(_rows.at(index.row())); + case FluTableModel::ColumnModel: + return QVariant::fromValue(_columnSource.at(index.column())); + default: + break; + } + return {}; +} + +QHash FluTableModel::roleNames() const { + return { + {FluTableModel::RowModel, "rowModel"}, + {FluTableModel::ColumnModel, "columnModel"} + }; +} + +QModelIndex FluTableModel::parent(const QModelIndex &child) const { + return {}; +} + +QModelIndex FluTableModel::index(int row, int column, const QModelIndex &parent) const { + if (!hasIndex(row, column, parent) || parent.isValid()) + return {}; + return createIndex(row, column); +} + +void FluTableModel::clear(){ + beginResetModel(); + this->_rows.clear(); + endResetModel(); +} + +QVariant FluTableModel::getRow(int rowIndex){ + return _rows.at(rowIndex); +} + +void FluTableModel::setRow(int rowIndex,QVariant row){ + _rows.replace(rowIndex,row.toMap()); + Q_EMIT dataChanged(index(rowIndex, 0), index(rowIndex, columnCount() - 1)); +} + +void FluTableModel::insertRow(int rowIndex,QVariant row){ + beginInsertRows(QModelIndex(), rowIndex, rowIndex); + _rows.insert(rowIndex,row.toMap()); + endInsertRows(); +} + +void FluTableModel::removeRow(int rowIndex,int rows){ + beginRemoveRows(QModelIndex(), rowIndex, rowIndex + rows - 1); + _rows = _rows.mid(0, rowIndex) + _rows.mid(rowIndex + rows); + endRemoveRows(); +} + +void FluTableModel::appendRow(QVariant row){ + insertRow(rowCount(),row); +} diff --git a/src/FluTableModel.h b/src/FluTableModel.h new file mode 100644 index 00000000..15b72435 --- /dev/null +++ b/src/FluTableModel.h @@ -0,0 +1,51 @@ +#ifndef FLUTABLEMODEL_H +#define FLUTABLEMODEL_H + +#include +#include +#include +#include "stdafx.h" + +class FluTableModel : public QAbstractTableModel { + Q_OBJECT + Q_PROPERTY_AUTO(int, dataSourceSize) + Q_PROPERTY_AUTO(QList, columnSource) + Q_PROPERTY_AUTO(QList, rows) + Q_PROPERTY(int rowCount READ rowCount CONSTANT) + QML_NAMED_ELEMENT(FluTableModel) +public: + enum TableModelRoles { + RowModel = 0x0101, + ColumnModel = 0x0102 + }; + + explicit FluTableModel(QObject *parent = nullptr); + + [[nodiscard]] int rowCount(const QModelIndex &parent = {}) const override; + + [[nodiscard]] int columnCount(const QModelIndex &parent = {}) const override; + + [[nodiscard]] QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + + [[nodiscard]] QHash roleNames() const override; + + [[nodiscard]] QModelIndex parent(const QModelIndex &child) const override; + + [[nodiscard]] QModelIndex index(int row, int column, const QModelIndex &parent = {}) const override; + + Q_INVOKABLE void clear(); + + Q_INVOKABLE QVariant getRow(int rowIndex); + + Q_INVOKABLE void setRow(int rowIndex,QVariant row); + + Q_INVOKABLE void insertRow(int rowIndex,QVariant row); + + Q_INVOKABLE void removeRow(int rowIndex,int rows = 1); + + Q_INVOKABLE void appendRow(QVariant row); + +}; + + +#endif // FLUTABLEMODEL_H diff --git a/src/Qt5/imports/FluentUI/Controls/FluTableView.qml b/src/Qt5/imports/FluentUI/Controls/FluTableView.qml index 099e8690..029c4e10 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluTableView.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluTableView.qml @@ -267,7 +267,7 @@ Rectangle { onReleased: { } onDoubleClicked:{ - if(typeof(display) == "object"){ + if(item_table_loader.isObject){ return } loader_edit.display = item_table_loader.display diff --git a/src/Qt6/imports/FluentUI/Controls/FluTableView.qml b/src/Qt6/imports/FluentUI/Controls/FluTableView.qml index 9d7eca69..f41bd9b4 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluTableView.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluTableView.qml @@ -267,7 +267,7 @@ Rectangle { onReleased: { } onDoubleClicked:{ - if(typeof(display) == "object"){ + if(item_table_loader.isObject){ return } loader_edit.display = item_table_loader.display