qt tablewidegt 文字避免缩略 大量文字自动换行显示

在这里插入图片描述
情况一,列文本显示不全
//设置所有列拉伸填满表格
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//设置具体列适应内容这里是第0列
ui->tableWidget->horizontalHeader()->setSectionResizeMode(0,QHeaderView::ResizeToContents);
/*
要导入相应头文件QHeaderView
setSectionResizeMode函数参数如下
QHeaderView::Interactive 用户可以调整区段的大小。 该部分还可以使用resize Section()以编程方式进行调整。 区段大小默认为默认区段大小
QHeaderView::Fixed 用户无法调整区段大小。 该部分只能使用resize Section()以编程方式调整大小。 区段大小默认为默认区段大小。
QHeaderView::Stretch 自适应宽度避免留白
QHeaderView::ResizeToContents 更具内容调整大小使它全展示 将根据整个列或行的内容自动调整区段的大小,使大小。 大小不能由用户或编程方式更改。
*/
在这里插入图片描述

情况二,行文本显示不全且文本不会换行显示
tablewidget的单元格不支持换行
使用委托:A不能做的事交给B

//委托类:
//头文件继承QStyledItemDelegate 并重写四个函数

#include
#include
#include
class textshow : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit textshow(QObject *parent = 0);
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const Q_DECL_OVERRIDE;
//创建编辑器
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
//为编辑器设置数据
void setEditorData(QWidget *editor, const QModelIndex &index) const;
//将数据写入到模型
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
//更新编辑器布局
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const;

signals:

public slots:

};

#endif // TEXTSHOW_H

//cpp
#include “textshow.h”
textshow::textshow(QObject *parent) :
QStyledItemDelegate (parent)
{
}
void textshow::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QString value = index.model()->data(index, Qt::EditRole).toString();
QPen pen;
if (option.state & QStyle::State_Selected ) {
if( option.state & QStyle::State_HasFocus )
{
painter->fillRect(option.rect, option.palette.highlight());
pen.setColor( Qt::white );
}
else
{
painter->fillRect(option.rect, option.palette.base() );
pen.setColor( Qt::black );
}
}
else
{
painter->fillRect(option.rect, option.palette.base() );
pen.setColor( Qt::black );
}
painter->setPen( pen );
painter->drawText(option.rect,Qt::TextWrapAnywhere,value);
}
//创建编辑器,当视图需要一个编辑器时,它通知委托来为被修改的项目提供一个编辑器部件
QWidget *textshow::createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
QTextEdit *editor = new QTextEdit(parent);
//设置滚动条出现与否
editor->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
return editor;
}
//设置委托控件数据
void textshow::setEditorData(QWidget *editor, const QModelIndex &index) const
{
QString value = index.model()->data(index, Qt::EditRole).toString();
QTextEdit newTextEdit= static_cast<QTextEdit>(editor);
newTextEdit->setPlainText( value );
}
void textshow::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
QTextEdit newTextEdit= static_cast<QTextEdit>(editor);
QString value = newTextEdit->toPlainText();
model->setData(index, value, Qt::EditRole);
}
void textshow::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
editor->setGeometry(option.rect);
}

//委托写好了给tablewidget的第0列用上
/给单元格设置委托texteidt代替lineedit
textshow* deleagater=new textshow;
ui->tableWidget->setItemDelegateForColumn(0,deleagater);
//然后设置每一行的item信息时计算当前行的高度

void MainWindow::autoRowH(QTableWidgetItem *item)
{
QString str=item->text();
QLabel tem;
//获取列宽
int w=ui->tableWidget->columnWidth(0);
//限定宽度
tem.setMaximumWidth(w);
tem.setMinimumWidth(w);
//设置样式表 影响行间距
tem.setStyleSheet(“QLabel{font: 75 12pt “华文细黑”}”);
//设置内容
tem.setText(str);
//设置文字可以换行
tem.setWordWrap(true);
//设置组件更具内容自动调整调整大小
tem.adjustSize();
//获取到高度
int h=tem.height();
//设定对应行高
if(h<26)h=36;
ui->tableWidget->setRowHeight(item->row(),h+10);
}

//例子如下
//信息条显示num:行数
for(int i=0;i<num;i++)
{
ui->tableWidget->setItem(i,0,new QTableWidgetItem(“例子”));
autoRowH(ui->tableWidget->item(i,0));
}
//总结 1新建委托类,设置委托列 2对每一行写入信息时,重新设置行高
3.总体重置每一行行高ui->tableWidget->verticalHeader()->setDefaultSectionSize(30); 及想对某行某列操作对表头操作即可。

  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

尾巴不开心

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值