setSortingEnabled(true)
setSortingEnabled(true)Load "guilib.ring"
New qapp { $ObjectName = "oSecondWindow" ### $ObjectName use inside Class SecondWindow as($ObjectName+".pBox2X()") oSecondWindow = new SecondWindow ### Class called SecondWindow exec()}
###-----------------------------------------------### Widget TABLE 2
Class SecondWindow
win2 = new qwidget() { setGeometry(30,40,700,400) setwindowtitle("Display qwidget - Win2 Table2 XYZ") Table2 = new qTableWidget(win2) { setrowcount(8) setcolumncount(6) setGeometry(20,20,800,600) setselectionbehavior(QAbstractItemView_SelectRows) setSelectionMode(QAbstractItemView_SelectItems) SetColumnWidth(0,60) # SetColumnWidth(1,100) # SetColumnWidth(2,75) #
mycols = new qstringlist() { append("ABLE") append("BAKER") append("CHARLIE") append("DOG") append("EASY") append("FOX") } setHorizontalHeaderLabels(mycols) setAlternatingRowColors(true)
setStyleSheet("QHeaderView::section { background-color: aqua }") horizontalHeader().setStyleSheet("color: blue") verticalHeader().setStyleSheet("color: red")
###---------------------------------------------------------------------- ### SORT Columns by Header Click, alternate sort every time it is clicked setSortingEnabled(true) ###--------------------------- ### Fill in Widget Table companyList = [] aList = [ [ "SPY", "SP500", "Index", 0, 109.24, 107.21 ], [ "SDYL", "SPDivs", "ETF", 1, 152.33, 119.85 ], [ "FB", "Facebook", "Tech", 2, 143.34, 114.02 ], [ "AMZN", "Amazon", "Cloud", 3, 154.80, 117.39 ], [ "NVDA", "Nvidia", "Chips", 4, 287.49, 141.35 ], [ "GOOGL", "Google", "Search", 5, 126.70, 107.83 ] ]
for x = 1 to 6 Add(companyList, new Company { Symbolz=aList[x][1] Namez=aList[x][2] Groupz=aList[x][3] Positionz=aList[x][4] Changez=aList[x][5] Ratioz=aList[x][6] } ) next
###------------------------------ ### Put data in Widget Cells
for x = 1 to len(companyList) item1 = new qtablewidgetitem(companyList[x].Symbolz) item2 = new qtablewidgetitem(companyList[x].Namez) item3 = new qtablewidgetitem(companyList[x].Groupz) item4 = new qtablewidgetitem("" + companyList[x].Positionz) item5 = new qtablewidgetitem("" + companyList[x].Changez) item6 = new qtablewidgetitem("" + companyList[x].Ratioz) setitem(x-1, 0, item1) setitem(x-1, 1, item2) setitem(x-1, 2, item3) setitem(x-1, 3, item4) setitem(x-1, 4, item5) setitem(x-1, 5, item6) next setItem(0,3, new qTableWidgetItem("Item03") ) setItem(2,1, new qTableWidgetItem("Item21") ) } ###-------------------------- show() } ###--------------------------------------
###------------------ ### TABLE 2 Methods func pHeaderFn See "Func pHeaderFn called " +nl See "Header X clicked: " +nl return ###--------------------- Class Company Symbolz Namez Groupz Positionz Changez Ratioz ###---------------------
Hello ALL1. How do you code a "click change event" in a qtTableWidget when clicking on a Header Cell2. See image of the behaviour of qtSort when clicking on a CheckBox in this example.The CheckBox moves from the top cell to the bottom cell.That Data Items are sorted
3. I want to remove the CheckBoxes and use only the Header Cell when clicked to generate the Func to sort the data.
oMyHeader = new QHeaderView(1,win2)oMyHeader.setSectionsClickable(true)oMyHeader.setSectionClickedEvent($ObjectName+".pheaderfn()")sethorizontalHeader(oMyHeader)setHorizontalHeaderLabels(mycols)
horizontalHeader().setStyleSheet("color: blue")
func pHeaderFn See "Func pHeaderFn called " +nl # The method geteventparameters() defined by RingQt to return a list of event parameters # The sectionClicked event contains one parameter : int logicalIndex x = self.oMyHeader.geteventparameters()[1] See "Header "+x+" clicked: " +nl header[x+1] += 1
if header[x+1] % 2 = 0 sorttype = "descending" else sorttype = "ascending" ok See "Header " + x +" clicked: " + sorttype + nlLoad "guilib.ring"
New qapp { toggle = False header = list(6)
$ObjectName = "oSecondWindow" ### $ObjectName use inside Class SecondWindow as($ObjectName+".pBox2X()") oSecondWindow = new SecondWindow ### Class called SecondWindow exec()}
###-----------------------------------------------### Widget TABLE 2
Class SecondWindow
win2 = new qwidget() { setGeometry(30,40,700,400) setwindowtitle("Display qwidget - Win2 Table2 XYZ") Table2 = new qTableWidget(win2) { setrowcount(8) setcolumncount(6) setGeometry(20,20,800,600) setselectionbehavior(QAbstractItemView_SelectRows) setSelectionMode(QAbstractItemView_SelectItems) SetColumnWidth(0,60) SetColumnWidth(1,100) SetColumnWidth(2,75)
mycols = new qstringlist() { append("ABLE") append("BAKER") append("CHARLIE") append("DOG") append("EASY") append("FOX") } ###---------------------------------- ### Set Headers and Colors
setHorizontalHeaderLabels(mycols) ### List horizontalHeaderItem(4).setText("NbrChange") ### Text setHorizontalHeaderItem(5, new QTableWidgetItem("NbrRatio")) ### Item setAlternatingRowColors(true) setStyleSheet("QHeaderView::section { background-color: aqua }") verticalHeader().setStyleSheet("color: red") horizontalHeader().setStyleSheet("color: blue")
###--------------------------------------------------- ### Enable Call to Func when Header Column is Clicked
oMyHeader = new QHeaderView(1,win2) oMyHeader.setSectionsClickable(true) oMyHeader.setSectionClickedEvent($ObjectName+".pheaderfn()") sethorizontalHeader(oMyHeader) ###--------------------------- ### Fill in Widget Table companyList = [] aList = [ [ "SPY", "SP500", "Index", 0, 109.24, 107.21 ], [ "SDYL", "SPDivs", "ETF", 1, 152.33, 119.85 ], [ "FB", "Facebook", "Tech", 2, 143.34, 114.02 ], [ "AMZN", "Amazon", "Cloud", 3, 154.80, 117.39 ], [ "NVDA", "Nvidia", "Chips", 4, 287.49, 141.35 ], [ "GOOGL", "Google", "Search", 5, 126.70, 107.83 ] ]
for x = 1 to 6 Add(companyList, new Company { Symbolz=aList[x][1] Namez=aList[x][2] Groupz=aList[x][3] Positionz=aList[x][4] Changez=aList[x][5] Ratioz=aList[x][6] } ) next
###------------------------------ ### Put data in Widget Cells for x = 1 to len(companyList) item1 = new qtablewidgetitem(companyList[x].Symbolz) item2 = new qtablewidgetitem(companyList[x].Namez) item3 = new qtablewidgetitem(companyList[x].Groupz) item4 = new qtablewidgetitem("" + companyList[x].Positionz) item5 = new qtablewidgetitem("" + companyList[x].Changez) item6 = new qtablewidgetitem("" + companyList[x].Ratioz) setitem(x-1, 0, item1) setitem(x-1, 1, item2) setitem(x-1, 2, item3) setitem(x-1, 3, item4) setitem(x-1, 4, item5) setitem(x-1, 5, item6) next setItem(0,3, new qTableWidgetItem("Item03") ) setItem(2,1, new qTableWidgetItem("Item21") )
###---------------------------------------------------------------------- ### SORT Columns by Header Click, Alternate Sort every time it is Clicked setSortingEnabled(true) } ###-------------------------- show() } ###--------------------------------------
###------------------ ### TABLE 2 Methods func pHeaderFn See "Func pHeaderFn called " +nl
# The method geteventparameters() defined by RingQt to return a list of event parameters # The sectionClicked event contains one parameter : int logicalIndex
x = self.oMyHeader.geteventparameters()[1] header[x+1] += 1 if header[x+1] % 2 = 0 sorttype = "descending" else sorttype = "ascending" ok See "Header " + x +" clicked: " + sorttype + nl See "Column: " + x +" TopRow: "+ Table2.item(0,x).text() + nl + nl
return ###--------------------- Class Company Symbolz Namez Groupz Positionz Changez Ratioz ###---------------------
mycolor = new qcolor() { setrgb(0,0,255,255) }
mybrush = new qbrush() { setstyle(1) setcolor (mycolor) }
item(3,3).setbackground(mybrush)
item(3,3).setbackground(mybrush) Table2.item(6,4).setbackground(mybrush))Table2.item(3,3).setbackground(mybrush) Table2.item(6,4).setbackground(mybrush)Load "guilib.ring"
New qapp { toggle = False header = list(6)
$ObjectName = "oSecondWindow" ### $ObjectName use inside Class SecondWindow as($ObjectName+".pBox2X()") oSecondWindow = new SecondWindow ### Class called SecondWindow exec()}
###-----------------------------------------------### Widget TABLE 2
Class SecondWindow
win2 = new qwidget() { setGeometry(30,40,700,400) setwindowtitle("Display qwidget - Win2 Table2 XYZ") Table2 = new qTableWidget(win2) { setrowcount(8) setcolumncount(6) setGeometry(20,20,800,600) setselectionbehavior(QAbstractItemView_SelectRows) setSelectionMode(QAbstractItemView_SelectItems) SetColumnWidth(0,60) SetColumnWidth(1,100) SetColumnWidth(2,75)
mycols = new qstringlist() { append("ABLE") append("BAKER") append("CHARLIE") append("DOG") append("EASY") append("FOX") } ###---------------------------------- ### Set Headers and Colors
setHorizontalHeaderLabels(mycols) ### List horizontalHeaderItem(4).setText("NbrChange") ### Text setHorizontalHeaderItem(5, new QTableWidgetItem("NbrRatio")) ### Item setAlternatingRowColors(true) setStyleSheet("QHeaderView::section { background-color: aqua }") verticalHeader().setStyleSheet("color: red") horizontalHeader().setStyleSheet("color: blue")
###--------------------------------------------------- ### Enable Call to Func when Header Column is Clicked
oMyHeader = new QHeaderView(1,win2) oMyHeader.setSectionsClickable(true) oMyHeader.setSectionClickedEvent($ObjectName+".pheaderfn()") sethorizontalHeader(oMyHeader) ###--------------------------- ### Fill in Widget Table companyList = [] aList = [ [ "SPY", "SP500", "Index", 0, 109.24, 107.21 ], [ "SDYL", "SPDivs", "ETF", 1, 152.33, 119.85 ], [ "FB", "Facebook", "Tech", 2, 143.34, 114.02 ], [ "AMZN", "Amazon", "Cloud", 3, 154.80, 117.39 ], [ "NVDA", "Nvidia", "Chips", 4, 287.49, 141.35 ], [ "GOOGL", "Google", "Search", 5, 126.70, 107.83 ] ]
for x = 1 to 6 Add(companyList, new Company { Symbolz=aList[x][1] Namez=aList[x][2] Groupz=aList[x][3] Positionz=aList[x][4] Changez=aList[x][5] Ratioz=aList[x][6] } ) next
###------------------------------ ### Put data in Widget Cells for x = 1 to len(companyList) item1 = new qtablewidgetitem(companyList[x].Symbolz) item2 = new qtablewidgetitem(companyList[x].Namez) item3 = new qtablewidgetitem(companyList[x].Groupz) item4 = new qtablewidgetitem("" + companyList[x].Positionz) item5 = new qtablewidgetitem("" + companyList[x].Changez) item6 = new qtablewidgetitem("" + companyList[x].Ratioz) setitem(x-1, 0, item1) setitem(x-1, 1, item2) setitem(x-1, 2, item3) setitem(x-1, 3, item4) setitem(x-1, 4, item5) setitem(x-1, 5, item6) next setItem(0,3, new qTableWidgetItem("Item03") ) setItem(2,1, new qTableWidgetItem("Item21") )
###---------------------------------------------------------------------- ### SORT Columns by Header Click, Alternate Sort every time it is Clicked setSortingEnabled(true) } ###-------------------------- show() } ###--------------------------------------
###------------------ ### TABLE 2 Methods func pHeaderFn See "Func pHeaderFn called " +nl
# The method geteventparameters() defined by RingQt to return a list of event parameters # The sectionClicked event contains one parameter : int logicalIndex
x = self.oMyHeader.geteventparameters()[1] header[x+1] += 1 if header[x+1] % 2 = 0 sorttype = "descending" else sorttype = "ascending" ok See "Header " + x +" clicked: " + sorttype + nl See "Column: " + x +" TopRow: "+ Table2.item(0,x).text() + nl + nl ###----------------------------- ### Manual Sort # # Table2.sortByColumn(x, False) ### False ascending, True decending ###---------------------- ### Sum of Changes column Table2.setitem(6, 4, new qtablewidgetitem("SumChg")) Sum = 0 for y = 0 to 5 Sum += Table2.item(y,4).text() next Table2.setitem(7, 4, new qtablewidgetitem("" + Sum))
###------------------------- ### Average of Ratio column Table2.setitem(6, 5, new qtablewidgetitem("AvgRatio")) Sum = 0 for y = 0 to 5 Sum += Table2.item(y,5).text() next Avg = Sum / y Table2.setitem(7, 5, new qtablewidgetitem("" + Avg)) ###-------------------- ### Item cell color ### tableWidget->item(8, 0)->setBackground(Qt::red);
mycolor = new qcolor() { setrgb(0,125,255,255) } mybrush = new qbrush() { setstyle(1) setcolor(mycolor) } Table2.item(3,3).setbackground(mybrush) Table2.item(6,4).setbackground(mybrush)
return
###--------------------- Class Company Symbolz Namez Groupz Positionz Changez Ratioz load "guilib.ring"
new qapp {
header = list(6)
$objectname = "osecondwindow" ### $objectname use inside class secondwindow as($objectname+".pBox2X()") osecondwindow = new secondwindow ### class called secondwindow exec()}
class secondwindow
win2 = new qwidget() { setgeometry(30,40,700,400) setwindowtitle("display qwidget - win2 Table2 xyz") Table2 = new qtablewidget(win2) { setrowcount(8) setcolumncount(6) setgeometry(20,20,800,600) setselectionbehavior(qabstractitemview_selectrows) setselectionmode(qabstractitemview_selectitems)
setcolumnwidth(2,75)
mycols = new qstringlist() { append("Able") append("Baker") append("Charlie") append("Dog") append("Easy") append("Fox") } sethorizontalheaderlabels(mycols) horizontalheaderitem(4).settext("NbrChange") sethorizontalheaderitem(5, new QTableWidgetItem("NbrRatio")) setalternatingrowcolors(true) setStyleSheet("QHeaderView::section { background-color: aqua }") verticalheader().setstylesheet("color: red") horizontalheader().setstylesheet("color: blue")
omyheader = new QHeaderView(1,win2) omyheader.setsectionsclickable(true) omyheader.setsectionclickedevent($objectname+".pheaderfn()") sethorizontalheader(omyheader) companyList = [] aList = [ [ "SPY", "SP500", "Index", 0, 109.24, 107.21 ], [ "SDYL", "SPDivs", "ETF", 1, 152.33, 119.85 ], [ "FB", "Facebook", "Tech", 2, 143.34, 114.02 ], [ "AMZN", "Amazon", "Cloud", 3, 154.80, 117.39 ], [ "NVDA", "Nvidia", "Chips", 4, 287.49, 141.35 ], [ "GOOGL", "Google", "Search", 5, 126.70, 107.83 ] ] for x = 1 to 6 add(companyList, new company { Symbolz=aList[x][1] Namez=aList[x][2] Groupz=aList[x][3] Positionz=aList[x][4] Changez=aList[x][5] Ratioz=aList[x][6] } ) next
for x = 1 to len(companyList) item1 = new QTableWidgetItem(companyList[x].Symbolz) item2 = new QTableWidgetItem(companyList[x].Namez) item3 = new QTableWidgetItem(companyList[x].Groupz) item4 = new QTableWidgetItem("" + companyList[x].Positionz) item5 = new QTableWidgetItem("" + companyList[x].Changez) item6 = new QTableWidgetItem("" + companyList[x].Ratioz) setitem(x-1, 0, item1) setitem(x-1, 1, item2) setitem(x-1, 2, item3) setitem(x-1, 3, item4) setitem(x-1, 4, item5) setitem(x-1, 5, item6) next
#setsortingenabled(true) } show() } ###-------------------------------------- func pheaderfn
see "func pheaderfn called " +nl
for i = 0 to 5
for j = 0 to 5
aList[i+1][j+1] = Table2.item(i, j).text()
next
next
sum = 0 for y = 0 to 5 sum += Table2.item(y,4).text() next sum = 0 for y = 0 to 5 sum += Table2.item(y,5).text() next avg = sum / y
mycolor = new qcolor() { setrgb(0,125,255,255) } mybrush = new qbrush() { setstyle(1) setcolor(mycolor) } nc = self.omyheader.geteventparameters()[1]
header[nc+1] += 1 if header[nc+1] % 2 = 0 sorttype = "descending" else sorttype = "ascending" ok if header[nc+1] % 2 = 0 bList = sort(aList, nc+1) bList = reverse(bList) else bList = sort(aList, nc+1) ok
for n = 1 to len(bList) Table2.setitem(n-1, 0, new QTableWidgetItem(bList[n][1])) Table2.setitem(n-1, 1, new QTableWidgetItem(bList[n][2])) Table2.setitem(n-1, 2, new QTableWidgetItem(bList[n][3])) Table2.setitem(n-1, 3, new QTableWidgetItem(bList[n][4])) Table2.setitem(n-1, 4, new QTableWidgetItem(bList[n][5])) Table2.setitem(n-1, 5, new QTableWidgetItem(bList[n][6])) next
Table2.setitem(6, 4, new QTableWidgetItem("sumchg")) Table2.setitem(7, 4, new QTableWidgetItem("" + sum)) Table2.setitem(6, 5, new QTableWidgetItem("avgratio")) Table2.setitem(7, 5, new QTableWidgetItem("" + avg))
Table2.item(6,4).setbackground(mybrush) see "header " + nc +" clicked: " + sorttype + nl see "column: " + nc +" toprow: "+ Table2.item(0,nc).text() + nl + nl
return class Company Symbolz Namez Groupz Positionz Changez Ratioz
QList<QTableWidgetItem *> selectedItems() QList<QTableWidgetSelectionRange> selectedRanges() const
Load "guilib.ring"
New qApp {
win1 = new qMainWindow() {
setGeometry(100,100,800,600)
setwindowtitle("Using QTableWidget")
Table1 = new qTableWidget(win1) {
setrowcount(10) setcolumncount(10)
setGeometry(10,10,400,400)
for x = 1 to 10
for y = 1 to 10
item1 = new qtablewidgetitem("10")
setitem(x-1,y-1,item1)
next
next
}
btn1 = new qPushButton(win1) {
setText("Increase")
setGeometry(510,10,100,30)
setClickEvent("pClick()")
}
show()
}
exec()
}
func pClick
for nRow = 0 to Table1.rowcount() - 1
for nCol = 0 to Table1.columncount() - 1
Table1.item(nRow,nCol) {
if isSelected()
setText( "" + ( 10 + text()) )
ok
}
next
next