qt之qtablewidget的使用

参考: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); //整行选中的方式
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇树谦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值