我有一个问题,在Qt中的文本elide太咄咄逼人的表,见图。
有完整数字0.8888的细胞.自从QTableWidget显示后,我就进行了编辑,其他的都是QTableWidget创建时的样子。看起来,elide是在较小的宽度上计算的,实际上是这样的。如何防止这种情况,并在小部件可见时立即获得适当的文本elide?
复制简单代码:
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,因为用户可以编辑值。这样,我自己做编辑就意味着在编辑开始时,可能通过委托将真正的价值放回原处。会很复杂。
发布于 2020-10-05 14:12:42
当一切都正常时..。
...the解决方案可以简单到禁用QTableWidget
中的elide,并直接设置像item的文本那样的被省略的字符串:
tableWidget->setTextElideMode(Qt::ElideNone);
tableWidget->setItem(0, 0, new QTableWidgetItem(tableWidget->fontMetrics().elidedText("0.234823489789234", Qt::ElideRight, tableWidget->columnWidth(0))));
不幸的是,QTableWidget
(或者可能是QStyledItemDelegate
)不尊重QAbstractItemView::textElideMode
属性。
因此,您需要以艰苦的方式来完成它,即使用委托。不过,别担心,这并不是更复杂。
解决方案
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,画家);}
请随意将填充物更改为合适的值。
tableWidget
的委托,如下所示:tableWidget->setItemDelegateForColumn(0,新Delegate(this)); )
其中Delegate
是您的QStyledItemDelegate
子类。
结果
此修改的结果是一列具有正确省略的文本。
发布于 2022-08-11 16:57:16
我认为解决办法是:
tableWidget->setWordWrap(false);
如果增加行高,您可能会发现文本(嗯,数字)已经在小数点处被“字包装”了。
我在找到this question的答案时发现了这个问题。
https://stackoverflow.com/questions/64198197
复制相似问题