qt5--表格控件QTableWidget
需要 #include <QTableWidget> #include <QTableWidgetItem>
#include "win.h" #include <QDebug> #include <QPushButton> #include <QList> Win::Win(QWidget *parent) : QWidget(parent) { this->resize(500,400); QPushButton* btn=new QPushButton("按钮",this); btn->move(400,350); connect(btn,&QPushButton::clicked,this,&Win::A); tw=new QTableWidget(this); //创建空表格控件 //tw=new QTableWidget(4,3,this);//创建4行3列表格控件 tw->move(10,10); tw->resize(400,300); tw->setRowCount(15);//设置行数--不包括标题 tw->setColumnCount(3);//设置列数 tw->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"物理");//设置水平标题 //tw->setVerticalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");//设置垂直标题 QTableWidgetItem* item0V0=new QTableWidgetItem("张三"); tw->setItem(0,0,item0V0); //给指定单元格设置数据 //参数1 行号 //参数2 列号 tw->setItem(1,0,new QTableWidgetItem("李四")); //给指定单元格设置数据 tw->setItem(2,0,new QTableWidgetItem("王五")); tw->setItem(3,0,new QTableWidgetItem("张三ab")); tw->setItem(4,0,new QTableWidgetItem("熊五")); tw->setItem(5,0,new QTableWidgetItem("刘六")); tw->setItem(6,0,new QTableWidgetItem("邢七")); tw->setItem(7,0,new QTableWidgetItem("宋八")); tw->setItem(8,0,new QTableWidgetItem("尚九")); tw->setItem(9,0,new QTableWidgetItem("施十")); tw->setItem(10,0,new QTableWidgetItem("陈十一")); tw->setItem(11,0,new QTableWidgetItem("程十二")); tw->setItem(12,0,new QTableWidgetItem("洪十三")); tw->setItem(13,0,new QTableWidgetItem("齐十四")); tw->setItem(14,0,new QTableWidgetItem("谢十五")); tw->setItem(0,2,new QTableWidgetItem(QString::number(86))); //QString::number(86)---int转成 QString tw->setItem(1,2,new QTableWidgetItem(QString::number(57))); tw->setItem(2,2,new QTableWidgetItem(QString::number(76))); tw->setItem(3,2,new QTableWidgetItem(QString::number(69))); //tw->insertRow(1);//插入一行 //参数 行索引 //tw->insertColumn(1);//插入一列 //参数 列索引 QList<QTableWidgetItem*> items= tw->findItems("张三Ab",Qt::MatchContains);//找出匹配的项目 //Qt::MatchExactly 完全匹配才算 //Qt::MatchContains 只要包含指定文本的就算-- 不区分大小写 //返回值:项目列表 QTableWidgetItem* item; item=items.first();//返回项目列表中的第一个项目指针 int i=item->row();//返回项目的行序号 i=tw->rowCount(); //返回 表格的行数--不包括标题 i=tw->columnCount(); // 返回表格的列数 tw->setColumnWidth(0,50);//设置列宽 //参数1 列序号 //参数2 列宽 tw->setRowHeight(0, 50); //设置行高,第一个参数序号,第二个参数高度值 tw->setShowGrid(true); //设置是否显示表格上的网格线,True为显示(默认),False不显示 item0V0->setTextAlignment(Qt::AlignCenter); //设置项目的文本对齐方式 //tw->setSpan(1, 0, 2, 2); //用来合并单元格,前两个int参数分别为起始行序号和列序号,后两个分别为要合并的行数和列数 connect(tw,&QTableWidget::itemClicked,this,&Win::B); //单击表格控件时触发的信号 //这个信号自动传递一个参数:被单击项目的指针 // itemDoubleClicked(QTableWidgetItem *item) 双击表格控件时触发的信号 connect(tw,&QTableWidget::itemSelectionChanged,this,&Win::C);//选择的项目发生变化时触发信号 connect(tw,&QTableWidget::currentItemChanged,this,&Win::D);//当前项目变化时触发信号 //这个信号自动传递二个参数:当前项目指针 前一项目指针 connect(tw,&QTableWidget::currentCellChanged,this,&Win::E);//当前单元格变化时触发信号 //这个信号自动传递四个参数:当前行序号 当前列序号 前一行序号 前一列序号 connect(tw,&QTableWidget::itemChanged,this,&Win::F);//项目内容发生变化时触发信号 //这个信号自动传递一个参数:变化后的项目指针 connect(tw,&QTableWidget::itemPressed,this,&Win::G);//在项目上按下了鼠标时触发信号 //这个信号自动传递一个参数:按下鼠标的项目指针 connect(tw,&QTableWidget::cellChanged,this,&Win::H);//单元格内容发生了修改,编辑完毕时触发信号 //包括用户和指令修改 //这个信号自动传递二个参数:单元格的行序号和列序号 connect(tw,&QTableWidget::cellClicked,this,&Win::I);//单击单元格时触发信号 //这个信号自动传递二个参数:单元格的行序号和列序号 //cellDoubleClicked(int row, int column) 双击单元格时触发信号 connect(tw,&QTableWidget::itemActivated,this,&Win::L);// 如何触发信号 ??? connect(tw,&QTableWidget::itemEntered,this,&Win::M);//表格没有焦点时鼠标按下某项目时触发信号 //这个信号自动传递一个参数:项目指针 } void Win::M(QTableWidgetItem *item){ qDebug()<<"鼠标进入了项目:"<<item->text(); } void Win::L(QTableWidgetItem *item){ qDebug()<<"激活了项目:"<<item->text(); } void Win::I(int row, int column){ qDebug()<<"单击了单元格:"<<row<<column; } void Win::H(int row, int column){ qDebug()<<"单元格内容变化了:"<<row<<column; } void Win::G(QTableWidgetItem *item){ qDebug()<<"按下了鼠标:"<<item->text(); } void Win::F(QTableWidgetItem *item){ qDebug()<<" 项目变化了"<<item->text(); } void Win::E(int currentRow, int currentColumn, int previousRow, int previousColumn){ qDebug()<<currentRow<< currentColumn<<previousRow<<previousColumn; } void Win::D(QTableWidgetItem *current, QTableWidgetItem *previous){ qDebug()<<current<<previous; } void Win::C(){ qDebug()<<"选择的项目变化了"; } void Win::B(QTableWidgetItem *item){ qDebug()<<item->text(); //item->text() 返回项目的文本 } Win::~Win() { } void Win::A(){ QTableWidgetItem* item=tw->item(1,2); //返回指定单元格的项目指针 //item->setText("李明"); //给项目设置文本 //tw->clear(); //清空表格内容--包括标题栏 //tw->clearContents();//清空表格内容--不清空标题栏 //tw->removeRow(1); //删除指定行--下面行自动上移 //tw->removeColumn(1);//删除指定列--右边列自动左移 //tw->scrollToItem(item,QAbstractItemView::PositionAtCenter); //滚动条滚到指定项目 //参数1 项目指针 //参数2:QAbstractItemView::EnsureVisible 确保滚动后项可见 //QAbstractItemView::PositionAtTop 确保滚动后项在视口的顶部 //QAbstractItemView::PositionAtBottom 确保滚动后项在视口的底部 //QAbstractItemView::PositionAtCenter 确保滚动后项在视口的中心 int i; //i=tw->column(item);//返回项目的列序号 //空项目返回-1 //i=tw->columnCount(); //返回表格列的总数 //i=tw->currentRow(); //返回表格当前行序号 //i=tw->currentColumn(); //返回表格当前列序号 //item=tw->currentItem(); //返回当前项目的指针 //tw->editItem(item); //如果项目是可编辑的,则开始编辑该项目 //item=tw->horizontalHeaderItem(2);//返回指定列的标题项目指针 //如果没有设置标题,返回空指针 //QList<QTableWidgetItem *> items=tw->selectedItems();//返回所有选中项目的指针 //(0xdb929559a0, 0xdb92955620, 0xdb92956b20, 0xdb92954f90) QPushButton* btn1=new QPushButton("按钮1"); //tw->setCellWidget(8,1,btn1); //在指定单元格设置一个空间 //参数1 参数2 单元格行序号和列序号 //tw->removeCellWidget(8,1);//删除指定单元格的控件 //tw->setCurrentCell(1,2); //设置当前单元格 //tw->setCurrentItem(item); //设置当前项目 QTableWidgetItem* item1=new QTableWidgetItem("化学"); //tw->setHorizontalHeaderItem(2,item1); //设置指定列的水平标题 //setVerticalHeaderItem(int row, QTableWidgetItem *item) 设置指定行的垂直标题 //tw->sortItems(2,Qt::DescendingOrder); //对指定列进行排序 //参数1 列序号 //参数2: Qt::AscendingOrder 升序--默认 //Qt::DescendingOrder 降序 //item=tw->takeItem(0,2); //指定单元格移除项目--项目不删除 //返回项目指针 //QTableWidgetItem * QTableWidget::takeVerticalHeaderItem(int row) //移除表格中的垂直标题头 //QTableWidgetItem * verticalHeaderItem(int row) //返回表格中的垂直标题头 //tw->item(0,2)->setFlags(Qt::ItemIsUserCheckable);//设置指定单元格的状态 //Qt::ItemIsEditable 不能编辑--只读 //Qt::ItemIsSelectable 不能选中 //tableWidget->horizontalHeader()->setStyleSheet(“image: url(:/img/a.png);image-position:left; “); //设置表头的样式。 //qDebug()<<item->text(); }
实例下载地址:https://share.weiyun.com/5XJEW44
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)