参考:Qt QTableWidget用法总结(https://blog.csdn.net/QtCompany/article/details/130810674)
文章目录
- 必须设置行列才可以正常显示表格内容(包括表头),期间可动态增加或删除修改,不知道为什么呢,qt就是这么设计的
初始化
QTableWidget* practice_table_widget;
practice_table_widget=new QTableWidget(6,2);//6行2列
practice_table_widget->horizontalHeader()->setVisible(false);//设置水平表头不可用
practice_table_widget->verticalHeader()->setVisible(false);//设置垂直表头不可用
practice_table_widget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//设置水平标题扩展
对表头文字的字体、颜色进行设置
QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //获得水平方向表头的Item对象
columnHeaderItem0->setFont(QFont("Helvetica")); //设置字体
columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //设置单元格背景颜色
columnHeaderItem0->setTextColor(QColor(200,111,30)); //设置文字颜色
不可编辑
//QAbstractItemView::NoEditTriggers 0 不能对表格内容进行修改
//QAbstractItemView::CurrentChanged 1 任何时候都能对单元格修改
//QAbstractItemView::DoubleClicked 2 双击单元格
//QAbstractItemView::SelectedClicked 4 单击已选中的内容
//QAbstractItemView::EditKeyPressed 8 Editing starts when the platform edit key has been pressed over an item.
//QAbstractItemView::AnyKeyPressed 16 按下任意键就能修改
//QAbstractItemView::AllEditTriggers 31 以上条件全包括
practice_table_widget->setEditTriggers(QAbstractItemView::NoEditTriggers);//设置不可编辑
添加内容
QStringList first_list;
first_list<<"第1行"<<"第2行"<<"第3行";
int counter=0;
//第1列固定内容 第2列初始化new一遍,后面再改变它的值,这样只需要new一次
for(auto _first_list:first_list){
practice_table_widget->setItem(counter,0,new QTableWidgetItem(_first_list));
practice_table_widget->setItem(counter,1,new QTableWidgetItem(""));
counter++;
}
counter=0;
//修改item的值
practice_table_widget->item(行号,列号)->setText("嘻嘻哈哈");
设置表头
//设置表头
QStringList headers;
headers << QStringLiteral("id") << QStringLiteral("名称") << QStringLiteral("价格");
practice_table_widget->setHorizontalHeaderLabels(headers);
//设置调整表头的约束,表头根据内容自适应大小or固定大小,
//可以点Stretch引过去看枚举,然后一个一个试一下就知道效果了。
practice_table_widget->setSectionResizeMode(QHeaderView::Stretch);
动态增加删除行
//动态删除行内容
int rowIndex=practice_table_widget->rowCount();//获取当前表格行数,会比下表多1因为从1开始的
practice_table_widget->removeRow(i-1);//相当于移除最后一行内容
//动态增加行内容
int rowIndex=practice_table_widget->rowCount();
practice_table_widget->setRowCount(rowIndex+2);//相当于加两行
practice_table_widget->setItem(rowIndex,0,new QTableWidgetItem("添加rowIndex行第0列的内容"));
practice_table_widget->setItem(rowIndex+1,0,new QTableWidgetItem("添加rowIndex+1行第0列的内容"));
// 删除所有行
int rowCount = qtablewidget->rowCount();
// 第一种方法
for(int i=0;i<rowCount;++i){
qtablewidget->removeRow(0);
}
// 第二种方法
for (int i = qtablewidget->rowCount() - 1; i >= 0; --i)
{
qtablewidget->removeRow(i);
}
清空
// 清空表格内容不包含表头
practice_table_widget->clearContents();
// 清空表格所有内容包括表格
practice_table_widget->clear();
存取数据(放在QTableWidgetItem里)
// 存数据
QString kkk = "啦啦啦";
QTableWidgetItem * item = new QTableWidgetItem;
item->setText("xixixi");
// Qt::UserRole Qt::UserRole+1 ... 随便想存几个存几个
item->setData(Qt::UserRole,kkk); // 随便放什么基础类型都行它是QVariant万能类型
practice_table_widget->setItem(行, 列, item);
// 取数据
QString kkk = practice_table_widget->item(行,列)->data(Qt::UserRole).toString();
设置表格内容居中
int rowCount = practice_table_widget->rowCount();
if(rowCount <= 0)
return;
int columCount = practice_table_widgete->columnCount();
for(int i=0;i<rowCount;++i)
{
for(int j=0;j<columCount;++j)
{
columCount->item(i,j)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
}
}
设置指定单个单元格可编辑
enumItemFlag{
NoItemFlags=0,
ItemIsSelectable=1,
ItemIsEditable=2,
ItemIsDragEnabled=4,
ItemIsDropEnabled=8,
ItemIsUserCheckable=16,
ItemIsEnabled=32,
ItemIsTristate=64,
ItemNeverHasChildren=128,
ItemIsUserTristate=256
};
//通过需要表格框状态可分为如下三种:灰⾊不可编辑状态、浅⾊不可编辑状态和浅⾊可双击编辑状态,⽽setflags的参数传⼊可以通过强制
//类型转换的⽅式。即对应于如下:
//灰⾊不可编辑状态:Item.setflags((ItemFlags) 0);
//浅⾊不可编辑状态:Item.setflags((ItemFlags) 32);
//浅⾊可双击编辑状态:Item.setflags((ItemFlags) 63);
//(注意:此处为63,不是64。虽然枚举类型中没有对应于63的值,但是63是QTableWidget实体创建的时候给每个Item的初始化flags
//值。设置成它就是可编辑状态!)
tableWidget->item(0,0)->setFlags(table_name->item(0,0)->flags() & ~Qt::ItemIsEditable);
item->setFlags(Qt::ItemIsEnabled) //表格单元item不可编辑
item->setFlags(Qt::ItemIsEditable) //表格单元item可编辑
设置某一格为正在编辑状态
tableWidget->setFoucus();
tableWidget->editItem(item);
表格合并
整行选中
//Constant Value Description
//QAbstractItemView::SelectItems 0 Selecting single items.选中单个单元格
//QAbstractItemView::SelectRows 1 Selecting only rows.选中一行
//QAbstractItemView::SelectColumns 2 Selecting only columns.选中一列
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //整行选中的方式