Qt QTableWidgetItem显示三点省略号无法展示完整文本问题问询
QTableWidget单元格文本显示三点省略号问题解决
问题现象
使用包含4列的QTableWidget控件时,通过循环编程方式填充QTableWidgetItem功能运行正常,但单元格无法展示完整文本,空间不足时会显示三点省略号,效果如下:
双击对应行进入编辑状态时,可正常显示全部文本,效果如下:
需求为通过编程方式设置QTableWidgetItem占满所有可用空间,或禁用三点省略号机制,即使文本溢出也直接展示完整文本。
问题复现代码
存在显示问题的第二列填充简化代码如下:
vector<OperationLine> lines = db->getOperationLines(ui->dateEditFrom->date(),ui->dateEditTo->date()); ui->operationTableWidget->setRowCount(lines.size()); ui->operationTableWidget->setTextElideMode(Qt::ElideNone); for(int i=0;i<lines.size();i++){ QTableWidgetItem* libelle_item = new QTableWidgetItem(lines.at(i).libelle); libelle_item->setToolTip(lines.at(i).libelle); setDocumentMode(libelle_item); libelle_item->setSizeHint(QSize(500,50)); // 该设置未生效 ui->operationTableWidget->setItem(i,1,libelle_item); } ui->operationTableWidget->resizeColumnsToContents();
补充说明:
OperationLine为简单自定义类,其中.libelle成员为QString类型。手动拖拽调整列宽无法解决问题,禁用单元格编辑功能也无效;注释掉上述循环填充代码,通过Qt Creator设计器手动添加项时,可正常显示完整文本,无省略号问题。
解决方法
代码中调用setTextElideMode(Qt::ElideNone)未生效的核心原因是:该接口默认仅对表头生效,单元格的文本省略模式需要单独通过项委托配置,同时列宽自适应逻辑需要同步调整,按以下步骤修改即可:
- 第一步:配置单元格文本渲染的省略模式为不省略,这是解决省略号问题的核心配置
// 为表格设置标准项委托,单独配置单元格文本不显示省略号 ui->operationTableWidget->setItemDelegate(new QStyledItemDelegate(ui->operationTableWidget)); ui->operationTableWidget->itemDelegate()->setElideMode(Qt::ElideNone); - 第二步:删除循环内给单个
QTableWidgetItem硬编码调用setSizeHint的代码,硬编码尺寸会干扰表格自适应布局逻辑 - 第三步:调整列宽配置逻辑,所有单元格填充完成后,先执行列宽自适应,再设置目标列拉伸占满剩余水平空间
// 所有单元格填充完成后执行 ui->operationTableWidget->resizeColumnsToContents(); // 设置第二列(索引为1)自动拉伸,占满表格剩余可用水平空间 ui->operationTableWidget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch); - 第四步:如果不需要文本自动换行,添加配置关闭换行,避免文本因单元格高度不足被截断
ui->operationTableWidget->setWordWrap(false);
注意:如果自定义实现的setDocumentMode方法给项添加了富文本渲染逻辑,需要确认自定义渲染逻辑中没有手动设置文本省略模式,否则会覆盖上述全局配置。
内容的提问来源于stack exchange,提问作者Brandonn
相关产品推荐
相关产品推荐

