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...
-
+
@@ -2013,42 +2013,42 @@ Some contents...
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
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...
-
+
名称
@@ -2145,42 +2145,42 @@ Some contents...
插入一行
-
+
焦点未获取:请点击表格中的任意一项,作为插入的靶点!
-
+
头像
-
+
地址
-
+
昵称
-
+
长字符串
-
+
操作
-
+
<上一页
-
+
下一页>
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