Skip to content

Commit 626c4d1

Browse files
committed
Feat: [DelTableView]增加快速处理模型的接口及文档.
1 parent fa8b1bc commit 626c4d1

File tree

3 files changed

+84
-1
lines changed

3 files changed

+84
-1
lines changed

DelegateUI_Qt5/gallery/UpdateLists.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
[
2+
{
3+
"isNew": false,
4+
"name": "DelTableView",
5+
"desc": "添加 clear() 函数。\n添加 appendRow() 函数。\n添加 getRow() 函数。\n添加 insertRow() 函数。\n添加 moveRow() 函数。\n添加 removeRow() 函数。\n添加 setRow() 函数。\n"
6+
},
27
{
38
"isNew": false,
49
"name": "DelOTPInput",

DelegateUI_Qt5/gallery/qml/Examples/DataDisplay/ExpTableView.qml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,17 @@ filterInput(可选) | string | 该列过滤输入
179179
- \`scrollToRow(row: int)\` 滚动到 \`row\` 指定的行。\n
180180
- \`sort(column: int)\` 排序 \`column\` 指定的列(该列的描述对象需要具有 \`sorter\`\`sortDirections\`)。\n
181181
- \`clearSort()\` 清除所有排序(即还原为初始状态)。\n
182-
- \`filter()\` 使用提供的(如果有,可以多列) \`onFilter\` 过滤整个模型。\n
182+
- \`filter()\` 使用提供的(如果有,可以多列) \`onFilter\` 过滤整个模型,**注意** 此函数还会确定应用了排序的列并自动进行重排\n
183183
- \`clearFilter()\` 清除所有过滤(即还原为初始状态)。\n
184+
- \`clear()\` 清空所有模型数据、排序和过滤。\n
185+
**注意** 以下函数仅作用于当前(排序&过滤后)的数据,不会更改 \`initModel\`,并且,为了最佳的性能,\n
186+
需要用户自行判断是否应该重新排序&过滤(调用 \`filter()\` 即可)\n
187+
- \`appendRow(object: var)\` 在当前模型末尾添加 \`object\` 行, 不会更改 \`initModel\`\n
188+
- \`object getRow(rowIndex: int)\` 获取当前模型 \`row\` 处的行数据。\n
189+
- \`insertRow(rowIndex: int, object: var)\` 在当前模型插入行数据 \`object\`\`rowIndex\` 处, 不会更改 \`initModel\`\n
190+
- \`moveRow(fromRowIndex: int, toRowIndex: int, count: int = 1)\`\`count\` 个模型数据从 \`from\` 位置移动到 \`to\` 位置, 不会更改 \`initModel\`\n
191+
- \`removeRow(rowIndex: int, count: int = 1)\` 删除当前模型 \`rowIndex\` 处的 \`count\` 条行数据, 不会更改 \`initModel\`\n
192+
- \`setRow(rowIndex: int, object: var)\` 设置当前模型 \`rowIndex\` 处行数据为 \`object\`, 不会更改 \`initModel\`\n
184193
`)
185194
}
186195

DelegateUI_Qt5/src/imports/DelegateUI/Controls/DelTableView.qml

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,62 @@ DelRectangle {
435435
__private.model = [...initModel];
436436
}
437437

438+
function clear() {
439+
__private.model = initModel = [];
440+
__cellModel.clear();
441+
columns.forEach(
442+
object => {
443+
if (object.sortDirections && object.sortDirections.length !== 0) {
444+
object.activeSorter = false;
445+
object.sortIndex = -1;
446+
object.sortMode = 'false';
447+
}
448+
if (object.hasOwnProperty('onFilter') || object.hasOwnProperty('filterInput')) {
449+
object.filterInput = '';
450+
}
451+
});
452+
}
453+
454+
function appendRow(object) {
455+
__private.model.push(object);
456+
__cellModel.appendRow( __private.toCellObject(object));
457+
}
458+
459+
function getRow(rowIndex) {
460+
if (rowIndex >= 0 && rowIndex < __private.model.length) {
461+
return __private.model[rowIndex];
462+
}
463+
return undefined;
464+
}
465+
466+
function insertRow(rowIndex, object) {
467+
__private.model.splice(rowIndex, 0, object);
468+
__cellModel.insertRow(rowIndex, __private.toCellObject(object));
469+
}
470+
471+
function moveRow(fromRowIndex, toRowIndex, count = 1) {
472+
if (fromRowIndex >= 0 && fromRowIndex < __private.model.length &&
473+
toRowIndex >= 0 && toRowIndex < __private.model.length) {
474+
const objects = __private.model.splice(from, count);
475+
__private.model.splice(to, 0, ...objects);
476+
__cellModel.moveRow(fromRowIndex, toRowIndex, count);
477+
}
478+
}
479+
480+
function removeRow(rowIndex, count = 1) {
481+
if (rowIndex >= 0 && rowIndex < __private.model.length) {
482+
__private.model.splice(rowIndex, count);
483+
__cellModel.removeRow(rowIndex, count);
484+
}
485+
}
486+
487+
function setRow(rowIndex, object) {
488+
if (rowIndex >= 0 && rowIndex < __private.model.length) {
489+
__private.model[rowIndex] = object;
490+
__cellModel.setRow(rowIndex, __private.toCellObject(object));
491+
}
492+
}
493+
438494
component HoverIcon: DelIconText {
439495
signal clicked()
440496
property alias hovered: __hoverHandler.hovered
@@ -523,6 +579,19 @@ DelRectangle {
523579
control.checkedKeys = [...checkedKeysMap.keys()];
524580
}
525581

582+
function toCellObject(object) {
583+
let dataObject = new Object;
584+
for (let i = 0; i < control.columns.length; i++) {
585+
const dataIndex = control.columns[i].dataIndex ?? '';
586+
if (object.hasOwnProperty(dataIndex)) {
587+
dataObject[`__data${i}`] = object[dataIndex];
588+
} else {
589+
dataObject[`__data${i}`] = null;
590+
}
591+
}
592+
return dataObject;
593+
}
594+
526595
onModelChanged: {
527596
__cellView.contentY = 0;
528597
__cellModel.clear();

0 commit comments

Comments
 (0)