Qt根据QFontMetrics类来计算当前字符串的长度实现QTextEdit自动换行的功能

suoniao 2020-08-24
需要:0索币

QTextEdit是富文本编辑框,在使用中具有自动换行的功能。当然你也可以使用QLabel+'\n'换行也具有相同的效果。但是你需要根据QFontMetrics类来计算当前字符串的长度。

 例如:

  QFont font("times", 24);

  QFontMetrics fm(font);
  int pixelsWide = fm.width("What's the width of this text?");
  int pixelsHigh = fm.height();
计算当前文本的宽度用于来换行,这种计算的方式还是不是很精准,会致使文字换行长短不一。
当然也有简单的方式实现文本的换行,让看起开就像label标签的形式一样,那就是用qtextedit,让它自动换行,但是也是有问题的就是当视口的大小小于文本显示的内容高度的时候就会出滚动条,
,这样很影响美观,就比如我在一个qtablewidget的某个单元格内需要一个能够支持换行功能的节点,我们都知道,qtablewidgeitem是不支持换行功能的,即使+‘\n’也是不支持的,因此我们在
qtablewidget中调用setcellwidget就可以把我们能够支持换行的界面放进去了,这时我们可以放入qtextedit,为了不使qtextedit出现滚动条,我们可以是指定行高为qtextedit的高度+
qtextedit的maximumHeight高度值,并且使qtextedit的滚动条隐藏,这样就可以使qtablewidget的节点为支持换行的节点。
example:
  QTextEdit *pEdit = new QTextEdit();
  pEdit->verticalScrollBar()->hide();
  pText->setReadOnly(true);
  pEdit->setText(str);
  QTableWidget *pTableWgt = new QTableWidget(this);
  pTableWgt->setColumnCount(1);
  pTableWgt->insertRow(0);
  pTableWgt->setCellWidget(0, 0, pEdit);
  pTableWgt->setRowHeight(pEdit->height() + pEdit->verticalScrollBar()+maximum());
记得是指样式表:
  QTextEdit{border:none;}

如上图效果
回帖
  • 消灭零回复
局域网文件共享软件
相关主题
Qt5.12.4requested database does not belong to the calling thread 0
构建Qt界面的工具栏,主要用到QToolBar类 0
QToolButton详细使用图解教程 给主界面添加图标和文字 0
Qt利用QClipboard复制hello suoniao到剪贴板 0
Qt剪切板复制图片和文本的方法将QImage格式复制到剪贴板,QPixmap要比QImage慢 0
QT 提供了QSystemTrayIcon类用于实现程序的托盘。QT提供了托盘示例 0
mainwindow单击关闭按钮不会触发关闭操作,它只是退出 0
addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed 0
获取QT QTreeWidget控件当前Item的文本text值 0
Qt利用QDir::drives获取磁盘盘符列表的代码 0
QT递归获取路径下面的文件和文件夹名称 0
QtreeWidget选中一行后背景色改变代码 0
Qt根据QFontMetrics类来计算当前字符串的长度实现QTextEdit自动换行的功能 0
Qt生成CSV格式数据和文件代码 0
QT利用QProcess执行外部CMD命令 0
QT利用QStandardPaths获取windows桌面路径代码 0
QT一行代码获取windows我的文档目录路径 0
QT利用QAxObject读取Excel一行数据代码 0
QT对Excel进行新增、删除、修改读取从入门到精通 0
引入objbase.h,解决返回QAxObject为空的问题 0
相关主题
QSqlQuery::exec: database not open 0
在安卓系统上运行一个HTTP服务器的软件NanoHttpd 0
在安卓系统上面运行一个HTTP服务器的软件NanoHttpd 0
Qt5.12.4requested database does not belong to the calling thread 0
构建Qt界面的工具栏,主要用到QToolBar类 0
QToolButton详细使用图解教程 给主界面添加图标和文字 0
两个不同网络的电脑怎么实现文件的互相访问呢? 1
解决 dns 污染,一定是要用国外的 dns,而且 dns 流量需要经过你的隧道 0
Qt利用QClipboard复制hello suoniao到剪贴板 0
Qt剪切板复制图片和文本的方法将QImage格式复制到剪贴板,QPixmap要比QImage慢 0
QT 提供了QSystemTrayIcon类用于实现程序的托盘。QT提供了托盘示例 0
mainwindow单击关闭按钮不会触发关闭操作,它只是退出 0
何用Go语言开发一个高负荷的WebSocket服务 0
c++使用protobuf与GO语言做数据通信 0
golang应该是可以代替对使用c++存在误解的人吧,代替语言是不可能的 0
怎么使用Javascript下载文件 json文件下载 0
addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed 0
获取QT QTreeWidget控件当前Item的文本text值 0
wavesurfer.js是一款基于HTML5 canvas和Web Audio的音频播放器插件 0
web端音频播放插件wavesurfer.js简单使用图文教程 绘制音频波纹图 0