Qt 设置QTableView表格列宽自动均分表格

前言

最近项目需要对数据库里的表进行一个自适应的显示,在显示到QTableView上时,发现表格的宽度会有点不太好看,所以就决定自动的调整表格的宽度。

setSectionResizeMode

ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 平分

这里也可以设置表格的宽度自动适应,但是这个比较僵硬,这个不会管表头的内容,只会去适应表格里面的内容,但是当表格里面的内容宽度小于表头的宽度时,就会把表头压缩到看不清楚,诚然你可以设置最小宽度,但是这样总归还是不太合适,设置最小宽度的方法在这里

    tableView = createView(mySqlQueryModel, QObject::tr("可颂坊报表系统"));
//tableView->resizeColumnsToContents();
// 设置表格调整模式为适应表格内容
tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
// 设置最小的宽度
tableView->horizontalHeader()->setMinimumSectionSize(100);

通过获取字体占的像素来设置

可以通过计算字体所占的像素来设置对应的宽度,使用的类是QFontMe

QFont font;
// fontFamily 是字体
font.setFamily(fontFamily);
// fontPixel 是大小
font.setPixelSize(fontPixel);
QFontMetrics fontMetrics(font); result = fontMetrics.boundingRect(text).width();

然后需要根据表格列的内容最大的宽度、平均分表格的宽度和表格表头文字所占的宽度来设置表格的列的宽度

// 表格列的宽度为 max (表格头的文字占的像素, 均分表格的长度, 表格中每一列中的文字最大值)
int tableWidth = ui->tableView->width() - 15;
// 排除第一列的复选框,所以需要减去100,且表格列数需要减一
int columnAverageWidth = (tableWidth - 100) / (m_itemModel->columnCount() - 1);
ui->tableView->setColumnWidth(0, 100);
for (int i = 1; i < m_itemModel->columnCount(); i++) {
// textPixel 为上面的计算字体所占像素的函数
int headerWordWidth = textPixel("Microsoft YaHei",
16,
m_itemModel->headerData(i, Qt::Horizontal)
.toString());
// QVector<int> m_columnTextMaxWidth; 记录了每一列中的文字的最宽所占的像素。
int columnWidth = qMax(m_columnTextMaxWidth.at(i)+10,
qMax(columnAverageWidth, headerWordWidth + 10));
ui->tableView->setColumnWidth(i, columnWidth);
}

这样的话,就可以根据找出最合适的宽度了。

Qt 设置QTableView表格列宽自动均分表格的更多相关文章

  1. jQuery表格列宽可变,兼容firfox

    本demo使用jQuery包,实现表格列宽可拖拽功能,并实现页面reset时的重新布局.使用jQuery,方便函数的调用,给要处理的表格添加id 后,直接调用$("#id").mo ...

  2. 使用jqueryUI实现自由调整表格列宽

    今天项目中需要插入表格,用Excel表格调整列宽时,想怎么拖就怎么拖,于是乎就让插入的表格也这么让人舒服.网上查找许久,没找到好用的方案.最后发现jQuery UI中的resizable()方法可以实 ...

  3. eas之添加表格列宽自动调整设置

    设置表格整体宽度自动调整为所在panel的宽度 KDTable table=new KDTable(); table. setAutoResize (boolean); 注意:该功能在冻结功能启用后, ...

  4. 设置tablewidget自适应列宽和设置自动等宽

      在网上很容易知道自适应列宽,100%不留空显示,这里还是提下: /*设置表格是否充满,即行末不留空*/ ui->tableWidget->horizontalHeader()-> ...

  5. java表格操作之设置表格列宽

    设置所有列的宽度 /** * 设置所有列的列宽 * @param table * @param width */ public void setAllColumnWidth(JTable table, ...

  6. saiku导出excel单元格格式与中文列宽自动适应

    在saiku导出excel后打开发现单元格的整数也显示为小数,并且含有中文的列宽没有自动适应,解决办法如下: 打开ExcelWorksheetBuilder.java文件,找到applyCellFor ...

  7. Asp.net 设置GridView自适应列宽不变形

    动态绑定的GridView由于列数不固定,而列又太多,这样设置GridView固定宽度就不能满足需求了.为此整理了两种方法来达到GridView自适应列宽不变形的效果. //在GridView的行数据 ...

  8. 转!!Java JTable 根据表格内容 自动调整表格列宽

    //根据表格内容 自动调整列宽http://blog.sina.com.cn/s/blog_5e54d6140100s1d3.html

  9. 原生js实现table表格列宽自由缩放

    <!DOCTYPE html> <html> <head> <meta charset="gbk"> <title>ta ...

  10. 原生js实现 table表格列宽拖拽

    查看效果 <!DOCTYPE html> <html> <head> <meta charset="gbk"> <title& ...

随机推荐

  1. 视频监控推流助手/极低延迟/支持N路批量多线程推流/264和265推流/监控转网页

    一.前言说明 搞视频监控开发除了基本的拉流以外,还有个需求是推流,需要将拉到的流重新推流到流媒体服务器,让流媒体服务做转发和负载均衡,这样其他地方只需要问流媒体服务器要视频流即可.为什么拉了又重新推呢 ...

  2. Eclipse中如何将web应用部署到tomcat

    第1种方法: 将workspace下的复制到tomcat的webapp下(我看度还是算了,看着都觉得麻烦). 第2种方法:总体思路就是:(1)先为web应用创建Tomcat Server:(2)再将w ...

  3. Python开发环境的构建:使用Anaconda与Pycharm

    Anaconda是一个科学计算环境,当在电脑上安装好Anaconda3以后,就相当于安装好了Python,还有一些常用的库,如numpy,scrip,matplotlib等库. (如果你这里没有安装a ...

  4. SpringBoot集成开源IM框架MobileIMSDK,实现即时通讯IM聊天功能

    一.前言 MobileIMSDK 是什么? MobileIMSDK  是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协 ...

  5. AI实战营第二期 | 环境配置及安装

    AI实战营第二期 | 环境配置及安装 强烈推荐使用 mim 来管理 OpenMMLab repo OpenMMLab repo 不要 mim 和 pip 混用 OpenMMLab 1.0 和 Open ...

  6. salesforce零基础学习(一百四十二)在Formula字段中如何通过Datetime字段显示Local Time(适配DST)

    背景: 我们需求是显示Date Time类型的Time信息,比如我们想要在report中基于Hour Of Created Date进行分组,从而想要了解到一段时间内什么时间是数据创建的高峰期,不同的 ...

  7. 解析mysql奇葩语句

    首先看看完整的表如下图 那么看看一个比较奇葩的语句 select * from users where name = 'aa'='bb'这个语句为啥能执行成功以及为什么打印出了除了两个aa之外的所有行 ...

  8. CDN与云计算技术的结合:专业视角下的深度融合

    本文分享自天翼云开发者社区<CDN与云计算技术的结合:专业视角下的深度融合>,作者:大利 随着信息技术的不断发展,内容分发网络(CDN)与云计算技术作为两种重要的互联网基础设施,其结合已成 ...

  9. datawhale-leetcode打卡:001-012题

    这次这十二个题目属于是极限肝出来的,有两个参考了一下题解,还是很有意思.我会按照我个人的感觉去写这个东西. 螺旋矩阵(leetcode 054) 这个题目比较恶心的就是跑圈的过程怎么描述.首先,顺时针 ...

  10. [BZOJ3622] 已经没有什么好害怕的了 题解

    发现难以维护差值,于是令 \(K=\frac{n+k}2\),这样就把问题转化为了"糖果"比"药片"大的组数为 \(K\) 的情况有多少种. 设 \(dp_{i ...