一、前言
记录使用qt的QTableWidget经验,记录下来每次在使用到可以便捷查看,也分享给大家
目录
2.表格不定长数据自动换行并保持最小行高(无初始化部分,更新数据内容部分)
二、环境
qt5.7 QTableWidget
windows/linux
三、正文
1.表格初始化通用函数
//通用表格初始化函数,建立表格列,刷新表头和列宽
void sysmain::tableWidget_init(QTableWidget *tab,QVector<int> line,QStringList name,bool push)
{
tab->clearContents();//清空内容
tab->verticalHeader()->setVisible(false);//去掉行序号
tab->horizontalHeader()->setFixedHeight(60); //设置表头的高度
tab->horizontalHeader()->setStretchLastSection(true);//设置表格是否充满,即行末不留空
//tab->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed); //禁止鼠标拖放列宽度
tab->horizontalHeader()->setFocusPolicy(Qt::NoFocus); //设置表头不可选
tab->horizontalHeader()->setHighlightSections(false); //设置表头不可选//QTableWidget表头塌陷问题解决
tab->setEditTriggers(QAbstractItemView::NoEditTriggers);//设置表格内容不可修改
tab->setSelectionBehavior(QAbstractItemView::SelectRows);//设置选中就是一行选中
tab->setSelectionMode(QAbstractItemView::SingleSelection);//设置只能选中一行
tab->setFocusPolicy(Qt::NoFocus);//设置去掉选中虚线框
//tab->setAlternatingRowColors(true);//设置表格颜色交替
//表格滚动部分实现函数:初始化函数+以下俩函数+ (QObject *obj, QEvent *event)
if(push)tab->viewport()->installEventFilter(this);//对此对象安装事件过滤器
if(push)tab->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);//设置滚动模式按照像素滑动,做表格滑动时使用
tab->setColumnCount(line.size());//设置列数量
for(int i=0;i<line.size();i++)
tab->setColumnWidth(i,line.at(i));
tab->setHorizontalHeaderLabels(name);//设置table列表各项标题
tab->setRowCount(0);
}
需创建头文件定义
QVector<int> table_line;//表格列宽度
QStringList table_title;//表格表头标题
初始化调用
table_line.clear();
if(Data_user.now_root){//判断当前用户是否具有管理员权限,有管理员权限,所有规则显示,可配置更改
table_line.append({150,400,400,150,80});//配置表格宽度5列
table_title.clear();
table_title.append({"序号","信号名称","信号范围","信号类型","修正系数"});//配置表格表头名称5列
}
else{//无管理员权限,部分内容不显示,不可更改
table_line.append({150,500,250});//配置表格宽度3列
table_title.clear();
table_title.append({"序号","信号名称","信号范围"});//配置表格表头名称3列
}
2.表格不定长数据自动换行并保持最小行高(无初始化部分,更新数据内容部分)
void sysmain::refuse_tableWidget_page4_rule(uint car, uint part, QTableWidget *TableWidget, bool search)
{
QPainter p(this);
QFontMetrics fm = p.fontMetrics();//获取字符串宽度
QString group[2]={"范围","枚举"};
for(int i=0;i<name.size();i++){ //刷新信号列表
TableWidget->setItem(i,0,new QTableWidgetItem(QString("%1").arg(i+1,2,10,QChar('0'))));//更新序号,保留2位整数
TableWidget->item(i,0)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);//数据居中
//刷新内容省略、、、
//下面判断某列字符串长度,超单元格列宽当前行就自动换行
if(fm.width(range.at(i))>300)
TableWidget->resizeRowToContents(i);//根据单元格内容自动换行,某一行
else
TableWidget->setRowHeight(i,50);//设置行高
}
// TableWidget->resizeRowsToContents();//根据单元格内容自动换行,全部,这样设置表格很扁,所有行高都是最小化适应文字高度,不好看
}
四、结语
未完待续。。。