当前位置:网站首页>QT qtablewidget table column top requirements ideas and codes
QT qtablewidget table column top requirements ideas and codes
2022-07-04 05:56:00 【Program yuan ZCC】
QT Project use QTableWidget when Requirements encountered :
The top of the table column 、 Cancel topping
Click a column to top , If there is no top column, set it to the first column , If there is a top row in front, row behind the top row .
When canceling the top column , Restore to the last position of the top column , If it is the last column at the top , Don't move the position
( In the example , Because there is also a header column , So the program 1 In the first column )
General idea :
There are custom classes in each column of table items , If you delete and then create a new one, it will be more troublesome .
So I used , First create a new column , Then copy the contents of each table item in the clicked column to the new column , Then delete the click column
Project example operation process :
1、 First select the program 1 Top to the first column
2、 Select show 3 Roof placement Will be scheduled to the program 1 Back
2、 And so on Select show 4 Roof placement Will be scheduled to the program 3 Back ( At this time, if you cancel the top program 4, Position the same )
3、 Click on the program 3 Cancel topping , Then it will be ranked to the last item in the top column , And so on
Main code :
// Roof placement
void MyManagement::setColTop() {
int curCol = clickedTableCol;// Currently click on the column
int toCol = 0;
for(int s = 0;s<programList.size();s++){//programList All column arrays
if(programList[s]->isTop == 1) {//isTop Is it the top
toCol++;
}
}
toCol++;// The number of columns to top , If there is no top, go to the first column , If there is a set rule, set the top number +1
QWidget *item = qTableWidget->cellWidget(0,curCol);
// TableWidgetHeadItem *item = dynamic_cast<TableWidgetHeadItem*>(ui->qTableWidget->cellWidget(0,curCol));
qDebug() << " curCol11== " << curCol;
ui->qTableWidget->insertColumn(toCol); // Insert column first , Copy the contents of the column into the new column , Delete the front row ( It's complicated not to delete first and then create a new one )
// int colnum = ui->qTableWidget->columnCount();
// ui->qTableWidget->setColumnCount(colnum);// Set number of columns
item->setStyleSheet("QLabel{color:rgb(173, 53, 0);}");
qTableWidget->setCellWidget(0, toCol, item);// Header
int nRowCount = qTableWidget->rowCount(); // Copy the contents of the table
for(int row=1; row<nRowCount; row++){
qDebug() << "==row== " << row << " curCol== "<< curCol;
QWidget *wdg = qTableWidget->cellWidget(row, curCol + 1);// The column has been inserted before To get the contents of cells, add 1
qTableWidget->setCellWidget(row, toCol, wdg);
}
qTableWidget->removeColumn(curCol + 1);// Delete the click column , Top to the front column , Delete by +1
// Modify the attributes in the array
for(int s = 0;s<programList.size();s++){
if(programList[s]->col == curCol) {
programList[s]->isTop = 1;
programList[s]->col = toCol;
}else if(programList[s]->col < curCol && programList[s]->isTop == 0){// Click behind the column to be placed at the top , The front is not the top +1
programList[s]->col += 1;
}
}
clickedTableCol = toCol;
qDebug() << " After topping col Location " << clickedTableCol;
qTableWidget->setCurrentCell(0, clickedTableCol);
// ui->qTableWidget->resizeColumnsToContents();
// ui->qTableWidget->resizeRowsToContents();
}
// Cancel topping
void MyManagement::cancelColTop() {
int curCol = clickedTableCol;
int toCol = 0;
for(int s = 0;s<programList.size();s++){
if(programList[s]->isTop == 1) {
toCol++;
}
}
qDebug() << " Cancel topping curCol11== " << curCol << " toCol== " << toCol;
QWidget *item = qTableWidget->cellWidget(0,curCol);
item->setStyleSheet("QLabel{color:rgb(255, 255, 255);}");
if(toCol == curCol) {// At the end of the top Position the same
for(int s = 0;s<programList.size();s++){
if(programList[s]->col == curCol) {
programList[s]->isTop = 0;
}
}
} else {
qTableWidget->insertColumn(toCol + 1);// Top the last column +1 Insert
qTableWidget->setCellWidget(0, toCol + 1, item);
int nRowCount = qTableWidget->rowCount(); // Copy the contents of the table
for(int row=1; row<nRowCount; row++){
qDebug() << "==row== " << row << " curCol== "<< curCol;
QWidget *wdg = qTableWidget->cellWidget(row, curCol);// The column has been inserted before To get the contents of cells, add 1
qTableWidget->setCellWidget(row, toCol + 1, wdg);
}
qTableWidget->removeColumn(curCol);
for(int s = 0;s<programList.size();s++){
if(programList[s]->col == curCol) {// First modify the current column
programList[s]->isTop = 0;
programList[s]->col = toCol;
} else if(programList[s]->col > curCol){// Larger than the current top column
if(programList[s]->isTop == 1) {// For the top column
programList[s]->col -= 1;
}
}
}
}
clickedTableCol = toCol;
qDebug() << " After canceling the top col Location " << clickedTableCol << " toCol== " << toCol;
qTableWidget->setCurrentCell(0, clickedTableCol);
}
边栏推荐
- Nexus 6p downgraded from 8.0 to 6.0+root
- Luogu deep foundation part 1 Introduction to language Chapter 5 array and data batch storage
- Halcon图片标定,使得后续图片处理过后变成与模板图片一样
- Layoutmanager layout manager: flowlayout, borderlayout, GridLayout, gridbaglayout, CardLayout, BoxLayout
- Kubernets first meeting
- VB. Net GIF (making and disassembling - optimizing code, class library - 5)
- How to solve the component conflicts caused by scrollbars in GridView
- Introduction To AMBA 简单理解
- Leetcode 184 Employees with the highest wages in the Department (July 3, 2022)
- 复合非线性反馈控制(二)
猜你喜欢
接地继电器DD-1/60
BUU-Crypto-[GXYCTF2019]CheckIn
Detectron:训练自己的数据集——将自己的数据格式转换成COCO格式
Detectron: train your own data set -- convert your own data format to coco format
BUU-Crypto-Cipher
ES6 modularization
AWT common components, FileDialog file selection box
测试岗的中年危机该如何选择?是坚守还是另寻出路?且看下文
HMS v1.0 appointment.php editid参数 SQL注入漏洞(CVE-2022-25491)
BUU-Crypto-[GUET-CTF2019]BabyRSA
随机推荐
js arguments参数使用和详解
BUU-Reverse-easyre
一键过滤选择百度网盘文件
Programmers don't talk about morality, and use multithreading for Heisi's girlfriend
Configure cross compilation tool chain and environment variables
Invalid revision: 3.18.1-g262b901-dirty
Accidentally deleted the data file of Clickhouse, can it be restored?
MySQL information_ Schema database
px em rem的区别
el-select如何实现懒加载(带搜索功能)
Error CVC complex type 2.4. a: Invalid content beginning with element 'base extension' was found. Should start with one of '{layoutlib}'.
509. 斐波那契数、爬楼梯所有路径、爬楼梯最小花费
ANSYS command
Weekly summary (*63): about positive energy
509. Fibonacci number, all paths of climbing stairs, minimum cost of climbing stairs
配置交叉编译工具链和环境变量
总线的基本概念
Uninstall Google drive hard drive - you must exit the program to uninstall
Review | categories and mechanisms of action of covid-19 neutralizing antibodies and small molecule drugs
win10清除快速访问-不留下痕迹