Compare commits

...

7 Commits

Author SHA1 Message Date
zhuzichu
2d4e61445e
Merge pull request #488 from yanhuacuo/path-for-insertRow
Add the functionality to insert new rows into the table
2024-04-28 10:47:28 +08:00
zhuzichu
cc79854191
Merge pull request #489 from w-jt/main
FluPagination.qml 添加自定义控件,通过header和footer属性添加控件
2024-04-28 10:46:47 +08:00
w-jt
500efa6298
添加自定义控件,通过header和footer属性添加控件
添加自定义控件,通过header和footer属性添加控件
2024-04-27 11:54:42 +08:00
w-jt
355332da96
添加自定义控件,通过header和footer属性添加控件
添加自定义控件,通过header和footer属性添加控件
2024-04-27 11:53:57 +08:00
w-jt
a0d662a8a5
添加自定义控件,通过header和footer属性添加控件
添加自定义控件,通过header和footer属性添加控件
2024-04-27 11:49:29 +08:00
w-jt
aecc3fe3b4
添加自定义控件,通过header和footer属性添加控件
添加自定义控件,通过header和footer属性添加控件
2024-04-27 11:48:19 +08:00
wubixiaozhu
3554fb99cd Add the functionality to insert new rows into the table 2024-04-27 09:40:37 +08:00
5 changed files with 281 additions and 224 deletions

View File

@ -1968,7 +1968,7 @@ Some contents...</source>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="177"/> <location filename="qml/page/T_TableView.qml" line="177"/>
<location filename="qml/page/T_TableView.qml" line="499"/> <location filename="qml/page/T_TableView.qml" line="513"/>
<source>Name</source> <source>Name</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1998,37 +1998,47 @@ Some contents...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="494"/> <location filename="qml/page/T_TableView.qml" line="470"/>
<source>Insert a Row</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qml/page/T_TableView.qml" line="478"/>
<source>Focus not acquired: Please click any item in the form as the target for insertion!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qml/page/T_TableView.qml" line="508"/>
<source>Avatar</source> <source>Avatar</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="512"/> <location filename="qml/page/T_TableView.qml" line="526"/>
<source>Address</source> <source>Address</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="520"/> <location filename="qml/page/T_TableView.qml" line="534"/>
<source>Nickname</source> <source>Nickname</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="527"/> <location filename="qml/page/T_TableView.qml" line="541"/>
<source>Long String</source> <source>Long String</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="535"/> <location filename="qml/page/T_TableView.qml" line="549"/>
<source>Options</source> <source>Options</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="554"/> <location filename="qml/page/T_TableView.qml" line="568"/>
<source>&lt;Previous</source> <source>&lt;Previous</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="555"/> <location filename="qml/page/T_TableView.qml" line="569"/>
<source>Next&gt;</source> <source>Next&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -2110,7 +2110,7 @@ Some contents...</source>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="177"/> <location filename="qml/page/T_TableView.qml" line="177"/>
<location filename="qml/page/T_TableView.qml" line="499"/> <location filename="qml/page/T_TableView.qml" line="513"/>
<source>Name</source> <source>Name</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -2140,37 +2140,47 @@ Some contents...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="494"/> <location filename="qml/page/T_TableView.qml" line="470"/>
<source>Insert a Row</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qml/page/T_TableView.qml" line="478"/>
<source>Focus not acquired: Please click any item in the form as the target for insertion!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qml/page/T_TableView.qml" line="508"/>
<source>Avatar</source> <source>Avatar</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="512"/> <location filename="qml/page/T_TableView.qml" line="526"/>
<source>Address</source> <source>Address</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="520"/> <location filename="qml/page/T_TableView.qml" line="534"/>
<source>Nickname</source> <source>Nickname</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="527"/> <location filename="qml/page/T_TableView.qml" line="541"/>
<source>Long String</source> <source>Long String</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="535"/> <location filename="qml/page/T_TableView.qml" line="549"/>
<source>Options</source> <source>Options</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="554"/> <location filename="qml/page/T_TableView.qml" line="568"/>
<source>&lt;Previous</source> <source>&lt;Previous</source>
<translation type="unfinished">&lt;</translation> <translation type="unfinished">&lt;</translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_TableView.qml" line="555"/> <location filename="qml/page/T_TableView.qml" line="569"/>
<source>Next&gt;</source> <source>Next&gt;</source>
<translation type="unfinished">&gt;</translation> <translation type="unfinished">&gt;</translation>
</message> </message>

View File

@ -13,7 +13,7 @@ FluContentPage{
property var dataSource : [] property var dataSource : []
property int sortType: 0 property int sortType: 0
property bool seletedAll: true property bool selectedAll: true
property string nameKeyword: "" property string nameKeyword: ""
onNameKeywordChanged: { onNameKeywordChanged: {
@ -32,11 +32,11 @@ FluContentPage{
onCheckBoxChanged: { onCheckBoxChanged: {
for(var i =0;i< table_view.rows ;i++){ for(var i =0;i< table_view.rows ;i++){
if(false === table_view.getRow(i).checkbox.options.checked){ if(false === table_view.getRow(i).checkbox.options.checked){
root.seletedAll = false root.selectedAll = false
return return
} }
} }
root.seletedAll = true root.selectedAll = true
} }
onSortTypeChanged: { onSortTypeChanged: {
@ -238,12 +238,12 @@ FluContentPage{
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
} }
FluCheckBox{ FluCheckBox{
checked: true === root.seletedAll checked: true === root.selectedAll
animationEnabled: false animationEnabled: false
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
clickListener: function(){ clickListener: function(){
root.seletedAll = !root.seletedAll root.selectedAll = !root.selectedAll
var checked = root.seletedAll var checked = root.selectedAll
itemModel.display = table_view.customItem(com_column_checbox,{"checked":checked}) itemModel.display = table_view.customItem(com_column_checbox,{"checked":checked})
for(var i =0;i< table_view.rows ;i++){ for(var i =0;i< table_view.rows ;i++){
var rowData = table_view.getRow(i) var rowData = table_view.getRow(i)
@ -466,6 +466,20 @@ FluContentPage{
table_view.appendRow(genTestObject()) table_view.appendRow(genTestObject())
} }
} }
FluButton{
text: qsTr("Insert a Row")
onClicked: {
if(typeof table_view.current !== 'undefined'){
var newLine = genTestObject()
var currentLine = dataSource.findIndex(obj => obj._key === table_view.current._key)
root.dataSource.splice(currentLine, 0, newLine);
table_view.dataSource = root.dataSource
}else{
showWarning(qsTr("Focus not acquired: Please click any item in the form as the target for insertion!"))
}
}
}
} }
} }
@ -588,7 +602,7 @@ FluContentPage{
return avatars[randomIndex]; return avatars[randomIndex];
} }
return { return {
checkbox: table_view.customItem(com_checbox,{checked:root.seletedAll}), checkbox: table_view.customItem(com_checbox,{checked:root.selectedAll}),
avatar:table_view.customItem(com_avatar,{avatar:getAvatar()}), avatar:table_view.customItem(com_avatar,{avatar:getAvatar()}),
name: getRandomName(), name: getRandomName(),
age:getRandomAge(), age:getRandomAge(),
@ -601,7 +615,7 @@ FluContentPage{
} }
} }
function loadData(page,count){ function loadData(page,count){
root.seletedAll = true root.selectedAll = true
const dataSource = [] const dataSource = []
for(var i=0;i<count;i++){ for(var i=0;i<count;i++){
dataSource.push(genTestObject()) dataSource.push(genTestObject())

View File

@ -1,100 +1,112 @@
import QtQuick 2.15 import QtQuick 2.15
import QtQuick.Controls 2.15 import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import FluentUI 1.0 import FluentUI 1.0
Item {
signal requestPage(int page,int count) Item {
property string previousText: qsTr("<Previous") signal requestPage(int page, int count)
property string nextText: qsTr("Next>")
property int pageCurrent: 0 property string previousText: qsTr("<Previous")
property int itemCount: 0 property string nextText: qsTr("Next>")
property int pageButtonCount: 5 property int pageCurrent: 0
property int pageCount: itemCount>0?Math.ceil(itemCount/__itemPerPage):0 property int itemCount: 0
property int __itemPerPage: 10 property int pageButtonCount: 5
property int __pageButtonHalf: Math.floor(pageButtonCount/2)+1 property int pageCount: itemCount > 0 ? Math.ceil(itemCount / __itemPerPage) : 0
id: control property int __itemPerPage: 10
implicitHeight: 40 property int __pageButtonHalf: Math.floor(pageButtonCount / 2) + 1
implicitWidth: content.width property Component header: null
Row{ property Component footer: null
id: content id: control
height: control.height implicitHeight: 40
spacing: 10 implicitWidth: content.width
padding: 10 Row {
FluToggleButton{ id: content
visible: control.pageCount>1 height: control.height
disabled: control.pageCurrent<=1 spacing: 10
text:control.previousText padding: 10
clickListener:function() { Loader {
control.calcNewPage(control.pageCurrent-1); sourceComponent: header
} }
} FluToggleButton {
Row{ visible: control.pageCount > 1
spacing: 5 disabled: control.pageCurrent <= 1
FluToggleButton{ text: control.previousText
property int pageNumber:1 clickListener: function () {
visible: control.pageCount>0 control.calcNewPage(control.pageCurrent - 1);
checked: pageNumber === control.pageCurrent }
text:String(pageNumber) }
clickListener:function() { Row {
control.calcNewPage(pageNumber); spacing: 5
}
} FluToggleButton {
FluText{ property int pageNumber: 1
visible: (control.pageCount>control.pageButtonCount&& visible: control.pageCount > 0
control.pageCurrent>control.__pageButtonHalf) checked: pageNumber === control.pageCurrent
text: "..." text: String(pageNumber)
} clickListener: function () {
Repeater{ control.calcNewPage(pageNumber);
id: button_repeator }
model: (control.pageCount<2)?0:(control.pageCount>=control.pageButtonCount)?(control.pageButtonCount-2):(control.pageCount-2) }
delegate:FluToggleButton{ FluText {
property int pageNumber: { visible: (control.pageCount > control.pageButtonCount &&
return (control.pageCurrent<=control.__pageButtonHalf) control.pageCurrent > control.__pageButtonHalf)
?(2+index) text: "..."
:(control.pageCount-control.pageCurrent<=control.pageButtonCount-control.__pageButtonHalf) }
?(control.pageCount-button_repeator.count+index) Repeater {
:(control.pageCurrent+2+index-control.__pageButtonHalf) id: button_repeator
} model: (control.pageCount < 2) ? 0 : (control.pageCount >= control.pageButtonCount) ? (control.pageButtonCount - 2) : (control.pageCount - 2)
text:String(pageNumber) delegate: FluToggleButton {
checked: pageNumber === control.pageCurrent property int pageNumber: {
clickListener:function(){ return (control.pageCurrent <= control.__pageButtonHalf)
control.calcNewPage(pageNumber); ? (2 + index)
} : (control.pageCount - control.pageCurrent <= control.pageButtonCount - control.__pageButtonHalf)
} ? (control.pageCount - button_repeator.count + index)
} : (control.pageCurrent + 2 + index - control.__pageButtonHalf)
FluText{ }
visible: (control.pageCount>control.pageButtonCount&& text: String(pageNumber)
control.pageCount-control.pageCurrent>control.pageButtonCount-control.__pageButtonHalf) checked: pageNumber === control.pageCurrent
text: "..." clickListener: function () {
} control.calcNewPage(pageNumber);
FluToggleButton{ }
property int pageNumber:control.pageCount }
visible: control.pageCount>1 }
checked: pageNumber === control.pageCurrent FluText {
text:String(pageNumber) visible: (control.pageCount > control.pageButtonCount &&
clickListener:function(){ control.pageCount - control.pageCurrent > control.pageButtonCount - control.__pageButtonHalf)
control.calcNewPage(pageNumber); text: "..."
} }
} FluToggleButton {
} property int pageNumber: control.pageCount
FluToggleButton{ visible: control.pageCount > 1
visible: control.pageCount>1 checked: pageNumber === control.pageCurrent
disabled: control.pageCurrent>=control.pageCount text: String(pageNumber)
text:control.nextText clickListener: function () {
clickListener:function() { control.calcNewPage(pageNumber);
control.calcNewPage(control.pageCurrent+1); }
} }
} }
} FluToggleButton {
function calcNewPage(page) visible: control.pageCount > 1
{ disabled: control.pageCurrent >= control.pageCount
if(!page) text: control.nextText
return clickListener: function () {
let page_num=Number(page) control.calcNewPage(control.pageCurrent + 1);
if(page_num<1||page_num>control.pageCount||page_num===control.pageCurrent) }
return }
control.pageCurrent=page_num Loader {
control.requestPage(page_num,control.__itemPerPage) sourceComponent: footer
} }
} }
function calcNewPage(page) {
if (!page)
return
let page_num = Number(page)
if (page_num < 1 || page_num > control.pageCount || page_num === control.pageCurrent)
return
control.pageCurrent = page_num
control.requestPage(page_num, control.__itemPerPage)
}
}

View File

@ -1,100 +1,111 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import FluentUI import FluentUI 1.0
Item { Item {
signal requestPage(int page,int count) signal requestPage(int page, int count)
property string previousText: qsTr("<Previous")
property string nextText: qsTr("Next>") property string previousText: qsTr("<Previous")
property int pageCurrent: 0 property string nextText: qsTr("Next>")
property int itemCount: 0 property int pageCurrent: 0
property int pageButtonCount: 5 property int itemCount: 0
property int pageCount: itemCount>0?Math.ceil(itemCount/__itemPerPage):0 property int pageButtonCount: 5
property int __itemPerPage: 10 property int pageCount: itemCount > 0 ? Math.ceil(itemCount / __itemPerPage) : 0
property int __pageButtonHalf: Math.floor(pageButtonCount/2)+1 property int __itemPerPage: 10
id: control property int __pageButtonHalf: Math.floor(pageButtonCount / 2) + 1
implicitHeight: 40 property Component header: null
implicitWidth: content.width property Component footer: null
Row{ id: control
id: content implicitHeight: 40
height: control.height implicitWidth: content.width
spacing: 10 Row {
padding: 10 id: content
FluToggleButton{ height: control.height
visible: control.pageCount>1 spacing: 10
disabled: control.pageCurrent<=1 padding: 10
text:control.previousText Loader {
clickListener:function() { sourceComponent: header
control.calcNewPage(control.pageCurrent-1); }
} FluToggleButton {
} visible: control.pageCount > 1
Row{ disabled: control.pageCurrent <= 1
spacing: 5 text: control.previousText
FluToggleButton{ clickListener: function () {
property int pageNumber:1 control.calcNewPage(control.pageCurrent - 1);
visible: control.pageCount>0 }
checked: pageNumber === control.pageCurrent }
text:String(pageNumber) Row {
clickListener:function() { spacing: 5
control.calcNewPage(pageNumber);
} FluToggleButton {
} property int pageNumber: 1
FluText{ visible: control.pageCount > 0
visible: (control.pageCount>control.pageButtonCount&& checked: pageNumber === control.pageCurrent
control.pageCurrent>control.__pageButtonHalf) text: String(pageNumber)
text: "..." clickListener: function () {
} control.calcNewPage(pageNumber);
Repeater{ }
id: button_repeator }
model: (control.pageCount<2)?0:(control.pageCount>=control.pageButtonCount)?(control.pageButtonCount-2):(control.pageCount-2) FluText {
delegate:FluToggleButton{ visible: (control.pageCount > control.pageButtonCount &&
property int pageNumber: { control.pageCurrent > control.__pageButtonHalf)
return (control.pageCurrent<=control.__pageButtonHalf) text: "..."
?(2+index) }
:(control.pageCount-control.pageCurrent<=control.pageButtonCount-control.__pageButtonHalf) Repeater {
?(control.pageCount-button_repeator.count+index) id: button_repeator
:(control.pageCurrent+2+index-control.__pageButtonHalf) model: (control.pageCount < 2) ? 0 : (control.pageCount >= control.pageButtonCount) ? (control.pageButtonCount - 2) : (control.pageCount - 2)
} delegate: FluToggleButton {
text:String(pageNumber) property int pageNumber: {
checked: pageNumber === control.pageCurrent return (control.pageCurrent <= control.__pageButtonHalf)
clickListener:function(){ ? (2 + index)
control.calcNewPage(pageNumber); : (control.pageCount - control.pageCurrent <= control.pageButtonCount - control.__pageButtonHalf)
} ? (control.pageCount - button_repeator.count + index)
} : (control.pageCurrent + 2 + index - control.__pageButtonHalf)
} }
FluText{ text: String(pageNumber)
visible: (control.pageCount>control.pageButtonCount&& checked: pageNumber === control.pageCurrent
control.pageCount-control.pageCurrent>control.pageButtonCount-control.__pageButtonHalf) clickListener: function () {
text: "..." control.calcNewPage(pageNumber);
} }
FluToggleButton{ }
property int pageNumber:control.pageCount }
visible: control.pageCount>1 FluText {
checked: pageNumber === control.pageCurrent visible: (control.pageCount > control.pageButtonCount &&
text:String(pageNumber) control.pageCount - control.pageCurrent > control.pageButtonCount - control.__pageButtonHalf)
clickListener:function(){ text: "..."
control.calcNewPage(pageNumber); }
} FluToggleButton {
} property int pageNumber: control.pageCount
} visible: control.pageCount > 1
FluToggleButton{ checked: pageNumber === control.pageCurrent
visible: control.pageCount>1 text: String(pageNumber)
disabled: control.pageCurrent>=control.pageCount clickListener: function () {
text:control.nextText control.calcNewPage(pageNumber);
clickListener:function() { }
control.calcNewPage(control.pageCurrent+1); }
} }
} FluToggleButton {
} visible: control.pageCount > 1
function calcNewPage(page) disabled: control.pageCurrent >= control.pageCount
{ text: control.nextText
if(!page) clickListener: function () {
return control.calcNewPage(control.pageCurrent + 1);
let page_num=Number(page) }
if(page_num<1||page_num>control.pageCount||page_num===control.pageCurrent) }
return Loader {
control.pageCurrent=page_num sourceComponent: footer
control.requestPage(page_num,control.__itemPerPage) }
} }
}
function calcNewPage(page) {
if (!page)
return
let page_num = Number(page)
if (page_num < 1 || page_num > control.pageCount || page_num === control.pageCurrent)
return
control.pageCurrent = page_num
control.requestPage(page_num, control.__itemPerPage)
}
}