目录

关键代码:

定义代理:

使用代理:

效果:


在前面的博客设置QTableView的内容自动换行(1)中,我介绍了如何利用setWordWrap实现换行。但是这样还是会造成末尾几个字被省略号代替。昨天在一个微信公众号“Qt教程”上看到一篇文章,介绍了用代理方法实现自动换行,且不会出现省略号。

关键代码:

定义代理:

#include "WrapDelegate.h"
#include <QPainter>WrapDelegate::WrapDelegate(QObject * parent): QStyledItemDelegate(parent)
{}WrapDelegate::~WrapDelegate()
{}void WrapDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{auto text = index.model()->data(index, Qt::DisplayRole).toString();//注意,这里必须用TextWrapAnywhere!  TextWordWrap无效painter->drawText(option.rect, Qt::TextWrapAnywhere | Qt::AlignVCenter, text);
}

这里注意,drawText里面一定要调用Qt::TextWrapAnywhere,这个选项决定了字符串只要超出单元格尺寸,就一定会在超出位置换行。而Qt::TextWordWrap只能在字符串标记"\n"的位置换行。

使用代理:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStandardItem>
#include "WrapDelegate.h"
#include <QTableView>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);for (int k = 0; k < 3; k++){QStandardItem * pItem = new QStandardItem(QString("%1").arg(k, 20, 10, QChar('0')));pItem->setEditable(true);m_lstItems << pItem;}m_model.appendRow(m_lstItems);QStringList lstHeader;lstHeader << QString::fromWCharArray(L"类型") << QString::fromWCharArray(L"名称")<< QString::fromWCharArray(L"样式");m_model.setHorizontalHeaderLabels(lstHeader);auto pTable = new QTableView;pTable->setModel(&m_model);setCentralWidget(pTable);//使用代理:auto pDelegate0 = new WrapDelegate();auto pDelegate1 = new WrapDelegate();auto pDelegate2 = new WrapDelegate();pTable->setItemDelegateForColumn(0, pDelegate0);pTable->setItemDelegateForColumn(1, pDelegate1);pTable->setItemDelegateForColumn(2, pDelegate2);//pTable->resizeRowsToContents();
}MainWindow::~MainWindow()
{delete ui;
}

完整代码可以在我的资源下载设置QTableView的内容自动换行,代理方式

效果:

设置QTableView的内容自动换行(2)相关推荐

  1. 【WPS】表格设置单元格内容自动换行

    现在的单元格的内容过长导致内容隐藏 选择目标单元格,右键弹出菜单,点击"设置单元格格式",弹出单元格格式对话框  在对齐--文本对齐方式--水平对齐,选择常规,在文本控制中把自动换 ...

  2. css中设置table中的td内容自动换行

    在项目中,有用到表格.因为有的内容比较长,所以需要列宽大一些,有的内容比较短,列宽就小一些.遇到了一个问题,在学校联系方式表里面,联系人电话/电子邮件这两列,无论我加多大的宽度,内容总是会把表格列撑的 ...

  3. td 内容自动换行 table表格td设置宽度后自动换行

    td 内容自动换行 table表格td设置宽度后自动换行 控制样式 table { table-layout:fixed; WORD-BREAK:break-all; } td { word-wrap ...

  4. css tr标签自动换行,HTML中table设置td标签内容过多自动换行

    今天遇到一个小问题,需要解决table标签中td标签内容过多自动换行的问题. 因为之前有经验(无论是内容过多省略显示还是内容过多换行都做过),这次的需求是内容过多换行显示. 首先在 table 上增加 ...

  5. DatagridView内容自动换行和换行符换行

    内容自动换行: 在 DataGridView 新增 Row 时,設定 DataGridView 的 DefaultCellStyle 屬性WrapMode=true: 换行符换行: 在 DataGri ...

  6. EXCEL单元格内容自动换行

    在工作中,我们常常会碰到这样的问题:在单元格中输入内容比较多,而内容又不会自动换行,导致后面的单元格内容被前面的所遮盖: 如何解决这个问题呢,EXCEL其实为我们提供了自动换行的功能,我们只需要启动它 ...

  7. gridview列内容自动换行的方法

    001-0004 gridview列内容自动换行的方法 在RowCreated事件中添加 e.Row.Cells[6].Attributes.Add("style", " ...

  8. QTableView根据内容自动调整大小(resizeColumnToContents解决不了的)

    前言 最近使用QTableView比较频繁,出现了一些比较奇葩的问题,其中之一就是QTableView在显示来自模型的数据时,经常会显示...省略了内容的后半部分. 如下图: 查看帮助文档可以找到re ...

  9. 转载:table单元格内容自动换行

    转载于:http://blog.csdn.net/limengmeng9006/article/details/10001107 1.设置table中的单元格内容自动换行,使用word-wrap在IE ...

最新文章

  1. mysql left day 7_day7-mysql函数
  2. oracle9I收缩表,Oracle 9i删除数据表(转)
  3. Qt5.12编译MySQl5.1.37驱动
  4. 剑指 Offer 面试题45:把数组排成最小的数——Python内置函数 map()、__lt__()、join()、sorted()
  5. ReactiveCocoa基础
  6. 数字化转型方法论_双中台:企业数字化转型的核心战略与方法论
  7. c语言 结构体的,c语言之结构体
  8. linux下u盘的使用
  9. 清理谷歌浏览器注册表_【从注册表解决谷歌浏览器主页被篡改】注册表被篡改_谷歌浏览器被360篡改...
  10. c#调用labview实现巴特沃斯滤波器
  11. 了解CV和RoboMaster视觉组(五)滤波器、观测器和预测方法:维纳滤波器Wiener Filter,LMS
  12. SQLiteDatabaseLockedException: database is locked
  13. 用pywinauto抓取微信公众号
  14. 使用html语言替换字符串中的特殊标点符号
  15. 贪心算法之田忌赛马问题
  16. 使用Dhtml和poi导出excle表格出现Error Type:LoadXMl Incorrect Json错误
  17. Python的PIL库中的getpixel方法 putpixel方法
  18. 每日单词20110602
  19. 【虚幻引擎】实现类LOL缓慢扣血血条
  20. 第三方App接入微信登录 解读

热门文章

  1. C语言程序设计—学籍信息管理系统
  2. 【转】内存不能为read/written 问题的简单解决办法
  3. 好诗好词PARKER SCP01-100-24-07苏轼
  4. 图片读取器和皮肤库设计
  5. 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法
  6. matlab求解复杂方程,帮忙用matlab求解复杂方程
  7. 清分、清算、结算的关系
  8. 计算机应用基础实验教程练习题答案,计算机应用基础实验教程答案.doc
  9. 大揭秘!Python处理办公自动化的10大场景!
  10. css如何实现背景透明,文字不透明