首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止QTableview中的文本太过激进?

如何防止QTableview中的文本太过激进?
EN

Stack Overflow用户
提问于 2020-10-04 18:11:23
回答 2查看 1.5K关注 0票数 3

我有一个问题,在Qt中的文本elide太咄咄逼人的表,见图。

有完整数字0.8888的细胞.自从QTableWidget显示后,我就进行了编辑,其他的都是QTableWidget创建时的样子。看起来,elide是在较小的宽度上计算的,实际上是这样的。如何防止这种情况,并在小部件可见时立即获得适当的文本elide?

复制简单代码:

代码语言:javascript
运行
复制
QTableWidget *tableWidget;
tableWidget = new QTableWidget(Dialog);
tableWidget->setGeometry(QRect(40, 20, 256, 192));
tableWidget->setRowCount(4);
tableWidget->setColumnCount(1);
tableWidget->setItem(0, 0, new QTableWidgetItem("0.234823489789234"));

和结果

请注意,我想避免自己做elide,因为用户可以编辑值。这样,我自己做编辑就意味着在编辑开始时,可能通过委托将真正的价值放回原处。会很复杂。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-05 14:12:42

当一切都正常时..。

...the解决方案可以简单到禁用QTableWidget中的elide,并直接设置像item的文本那样的被省略的字符串:

代码语言:javascript
运行
复制
tableWidget->setTextElideMode(Qt::ElideNone);
tableWidget->setItem(0, 0, new QTableWidgetItem(tableWidget->fontMetrics().elidedText("0.234823489789234", Qt::ElideRight, tableWidget->columnWidth(0))));

不幸的是,QTableWidget (或者可能是QStyledItemDelegate)不尊重QAbstractItemView::textElideMode属性。

因此,您需要以艰苦的方式来完成它,即使用委托。不过,别担心,这并不是更复杂。

解决方案

  1. 子类QStyledItemDelegate并重新实现其paint方法,如下所示:

无效代表::QPainter* opt,const QStyleOptionViewItem &option,const QModelIndex &index) const { if (!index.isValid()返回;QStyleOptionViewItem opt= option;initStyleOption(&opt,index);int填充= 3;opt>save();opt>setClipRect( opt.rect );opt.rect=opt.rect.adjusted(填充,填充,-padding,-padding);画家->画图图文集( opt.rect,Qt:AlignLeft\ Qt::AlignVCenter,opt.fontMetrics.elidedText( opt.text,Qt:ElideRight,opt.rect.width();画家->restore();opt.rect= option.rect;opt.textElideMode = Qt::ElideNone;opt.text= "";QApplication::style()->drawControl(QStyle::CE_ItemViewItem,&opt,画家);}

请随意将填充物更改为合适的值。

  1. 为所需列设置tableWidget的委托,如下所示:

tableWidget->setItemDelegateForColumn(0,新Delegate(this)); )

其中Delegate是您的QStyledItemDelegate子类。

结果

此修改的结果是一列具有正确省略的文本。

票数 3
EN

Stack Overflow用户

发布于 2022-08-11 16:57:16

我认为解决办法是:

代码语言:javascript
运行
复制
tableWidget->setWordWrap(false);

如果增加行高,您可能会发现文本(嗯,数字)已经在小数点处被“字包装”了。

我在找到this question的答案时发现了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64198197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档