当前位置:网站首页>QT QTableWidget 表格列置顶需求的思路和代码
QT QTableWidget 表格列置顶需求的思路和代码
2022-07-04 05:49:00 【程序媛zcc】
QT 项目使用 QTableWidget时 遇到的需求:
表格列的置顶、取消置顶
点击某一列置顶,如没有置顶列则置顶到第一列,如前方有置顶列则往置顶列之后排。
取消置顶列时,还原到置顶列最后位置,如果是置顶最后一列,位置不用动
(例子中,因为还有一个表头列,所以节目1所在为第一列)
大概思路:
每列表格项里有自定义类,如果删除再新建会比较麻烦。
所以我采用的是,先新建列,然后把点击列里每列表格项的内容复制到新列里,然后再删除点击列
项目示例操作流程:
1、先选择节目1 置顶到第一列
2、选择节目3 置顶 会排到节目1 后面
2、以此类推 选择节目4 置顶 会排到节目3 后面(此时如果取消置顶节目4,位置不变)
3、此时点击节目3取消置顶,则排到置顶列的最后一项,以此类推
主要代码:
//置顶
void MyManagement::setColTop() {
int curCol = clickedTableCol;//当前点击列
int toCol = 0;
for(int s = 0;s<programList.size();s++){//programList 所有列数组
if(programList[s]->isTop == 1) {//isTop 是否为置顶
toCol++;
}
}
toCol++;//要置顶到的列数, 没有置顶则到第一列,有置定则置顶数+1
QWidget *item = qTableWidget->cellWidget(0,curCol);
// TableWidgetHeadItem *item = dynamic_cast<TableWidgetHeadItem*>(ui->qTableWidget->cellWidget(0,curCol));
qDebug() << " curCol11== " << curCol;
ui->qTableWidget->insertColumn(toCol); // 先插入列,列内容复制到新列中,再删除之前列(不用先删除再新建比较复杂)
// int colnum = ui->qTableWidget->columnCount();
// ui->qTableWidget->setColumnCount(colnum);//设置列数
item->setStyleSheet("QLabel{color:rgb(173, 53, 0);}");
qTableWidget->setCellWidget(0, toCol, item);//表头
int nRowCount = qTableWidget->rowCount(); //复制表格里内容
for(int row=1; row<nRowCount; row++){
qDebug() << "==row== " << row << " curCol== "<< curCol;
QWidget *wdg = qTableWidget->cellWidget(row, curCol + 1);//前面已插入列 获取单元格内容需加1
qTableWidget->setCellWidget(row, toCol, wdg);
}
qTableWidget->removeColumn(curCol + 1);//删除点击列,置顶到前面一列,删除需+1
// 修改数组里的属性
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){//点击要置顶的列后面不管,前面不是置顶的+1
programList[s]->col += 1;
}
}
clickedTableCol = toCol;
qDebug() << "置顶后col 位置" << clickedTableCol;
qTableWidget->setCurrentCell(0, clickedTableCol);
// ui->qTableWidget->resizeColumnsToContents();
// ui->qTableWidget->resizeRowsToContents();
}
//取消置顶
void MyManagement::cancelColTop() {
int curCol = clickedTableCol;
int toCol = 0;
for(int s = 0;s<programList.size();s++){
if(programList[s]->isTop == 1) {
toCol++;
}
}
qDebug() << " 取消置顶 curCol11== " << curCol << " toCol== " << toCol;
QWidget *item = qTableWidget->cellWidget(0,curCol);
item->setStyleSheet("QLabel{color:rgb(255, 255, 255);}");
if(toCol == curCol) {//列在置顶的最后 位置不变
for(int s = 0;s<programList.size();s++){
if(programList[s]->col == curCol) {
programList[s]->isTop = 0;
}
}
} else {
qTableWidget->insertColumn(toCol + 1);//置顶最后一列+1 插入
qTableWidget->setCellWidget(0, toCol + 1, item);
int nRowCount = qTableWidget->rowCount(); //复制表格里内容
for(int row=1; row<nRowCount; row++){
qDebug() << "==row== " << row << " curCol== "<< curCol;
QWidget *wdg = qTableWidget->cellWidget(row, curCol);//前面已插入列 获取单元格内容需加1
qTableWidget->setCellWidget(row, toCol + 1, wdg);
}
qTableWidget->removeColumn(curCol);
for(int s = 0;s<programList.size();s++){
if(programList[s]->col == curCol) {//先修改当前列
programList[s]->isTop = 0;
programList[s]->col = toCol;
} else if(programList[s]->col > curCol){//比当前置顶列大
if(programList[s]->isTop == 1) {//为置顶列
programList[s]->col -= 1;
}
}
}
}
clickedTableCol = toCol;
qDebug() << "取消置顶后col 位置" << clickedTableCol << " toCol== " << toCol;
qTableWidget->setCurrentCell(0, clickedTableCol);
}
边栏推荐
- Online shrimp music will be closed in January next year. Netizens call No
- One click filtering to select Baidu online disk files
- Leetcode 184 Employees with the highest wages in the Department (July 3, 2022)
- left_and_right_net正常版本
- Leetcode question brushing record | 206_ Reverse linked list
- 体验碎周报第 102 期(2022.7.4)
- 509. Fibonacci number, all paths of climbing stairs, minimum cost of climbing stairs
- C # character similarity comparison general class
- Nexus 6p从8.0降级6.0+root
- Accidentally deleted the data file of Clickhouse, can it be restored?
猜你喜欢
每周小结(*63):关于正能量
buuctf-pwn write-ups (8)
配置交叉编译工具链和环境变量
How to solve the component conflicts caused by scrollbars in GridView
LayoutManager布局管理器:FlowLayout、BorderLayout、GridLayout、GridBagLayout、CardLayout、BoxLayout
Impact relay jc-7/11/dc110v
测试岗的中年危机该如何选择?是坚守还是另寻出路?且看下文
检漏继电器JY82-2P
Arc135 C (the proof is not very clear)
HMS v1.0 appointment. PHP editid parameter SQL injection vulnerability (cve-2022-25491)
随机推荐
gslb(global server load balance)技术的一点理解
VB. Net GIF (making and disassembling - optimizing code, class library - 5)
BUU-Reverse-easyre
[Chongqing Guangdong education] electronic circuit homework question bank of RTVU secondary school
一键过滤选择百度网盘文件
如何展开Collapse 的所有折叠面板
Canoe panel learning video
How to implement lazy loading in El select (with search function)
How to expand all collapse panels
剑指 Offer II 038. 每日温度
VB. Net calls ffmpeg to simply process video (class Library-6)
ANSYS command
Halcon图片标定,使得后续图片处理过后变成与模板图片一样
left_and_right_net可解释性设计
冲击继电器JC-7/11/DC110V
Excel 比较日器
JS flattened array of number shape structure
[Excel] 数据透视图
70000 words of detailed explanation of the whole process of pad openvino [CPU] - from environment configuration to model deployment
Detectron:训练自己的数据集——将自己的数据格式转换成COCO格式