【qt】QTableWidget 表格组件2:https://developer.aliyun.com/article/1523072
五.删除功能
1.删除逻辑
通过获取当前光标在的单元格位置,来删除单元格所在的行。
2.获取当前选中的单元格
void MainWindow::on_actionDel_triggered() { auto item=ui->tableWidget->currentItem(); ui->tableWidget->removeRow(item->row()); }
运行结果:
这样有个问题就是,当我们删除后,没有进行选择,但是还是可以删除,所以我们要进行是否被选中的判断。
3.判断单元格是否被选中
void MainWindow::on_actionDel_triggered() { auto item=ui->tableWidget->currentItem(); if(item->isSelected()) { ui->tableWidget->removeRow(item->row()); } }
问题就被完美的解决了。
4.删除行
ui->tableWidget->removeRow(item->row());
六.查找功能
1.查找逻辑
我们是在行编辑器中去输入字符串,通过按钮来关联槽函数来进行包含查找,查找到就进行选中,同时来搞一个高亮显示。
2.查找字符
因为我们打算是在状态栏加lineedit和pushbutton所以我们只能用代码来进行添加。
lineFind=new QLineEdit; button=new QPushButton; label=new QLabel; statusBar()->addWidget(lineFind); statusBar()->addWidget(button); statusBar()->addWidget(label); lineFind->setMaximumWidth(200); button->setText("查找"); connect(button,SIGNAL(clicked()),this,SLOT(onButtonFind()));//对按钮进行自己定义的槽函数关联
运行结果:
void MainWindow::onButtonFind() { QString ret=lineFind->text().trimmed();//去除开头和结尾的空白符 if(ret.length()>0) { //包含模式查找,返回的是一个容器链表 auto items=ui->tableWidget->findItems(ret,Qt::MatchContains); //遍历所有查找到的结果将其设置为选中 for(auto it=items.begin();it!=items.end();it++) { (*it)->setSelected(true); } } }
3.设置选中
//遍历所有查找到的结果将其设置为选中 for(auto it=items.begin();it!=items.end();it++) { (*it)->setSelected(true); }
4.设置样式表
可以看成查到了牛马,但是这个颜色太浅了,我们可以来设置选中的样式表来高亮显示。
ui->tableWidget->setStyleSheet("selection-background-color:rgb(255,128,0)");
运行结果;
这就很清晰了,但是有个问题就是我们下次查询的时候,这些高亮还是在,所有我们要进行清除选中。
5.清除高亮
ui->tableWidget->clearSelection();//清除选中
这就很爽了,你们可以试试。
七.显示信息
1.显示逻辑
当我们随便选择一个单元格的时候,我们就在标签上,显示该单元格所在的一行信息。
2.信号
3.读出单元格的信息
void MainWindow::on_tableWidget_cellClicked(int row, int column) { QString ret; for(int i=0;i<ui->tableWidget->columnCount();i++) { ret+=ui->tableWidget->item(row,i)->text()+"/"; } label->setText(ret); }
运行结果:
八.总结
表格的构建先列(表头)后行,每一个数据都是通过单元格进行设置。
其次就是对增删改查功能的设计的掌握。
人的一切痛苦,本质上都是对自己无能的愤怒。