设置QTableView的内容自动换行(2)

目录

关键代码:

定义代理:

使用代理: 

效果:


在前面的博客设置QTableView的内容自动换行(1)中,我介绍了如何利用setWordWrap实现换行。但是这样还是会造成末尾几个字被省略号代替。昨天在一个微信公众号“Qt教程”上看到一篇文章,介绍了用代理方法实现自动换行,且不会出现省略号。

关键代码:

定义代理:

#include "WrapDelegate.h"
#include <QPainter>

WrapDelegate::WrapDelegate(QObject * parent)
    : QStyledItemDelegate(parent)
{

}

WrapDelegate::~WrapDelegate()
{

}

void WrapDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    auto text = index.model()->data(index, Qt::DisplayRole).toString();
    //注意,这里必须用TextWrapAnywhere!  TextWordWrap无效
    painter->drawText(option.rect, Qt::TextWrapAnywhere | Qt::AlignVCenter, text);
}

 这里注意,drawText里面一定要调用Qt::TextWrapAnywhere,这个选项决定了字符串只要超出单元格尺寸,就一定会在超出位置换行。而Qt::TextWordWrap只能在字符串标记"\n"的位置换行。

使用代理: 

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStandardItem>
#include "WrapDelegate.h"
#include <QTableView>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    for (int k = 0; k < 3; k++)
    {
        QStandardItem * pItem = new QStandardItem(QString("%1").arg(k, 20, 10, QChar('0')));
        pItem->setEditable(true);
        m_lstItems << pItem;
    }

    m_model.appendRow(m_lstItems);

    QStringList lstHeader;
        lstHeader << QString::fromWCharArray(L"类型") << QString::fromWCharArray(L"名称")
                  << QString::fromWCharArray(L"样式");
    m_model.setHorizontalHeaderLabels(lstHeader);
    auto pTable = new QTableView;
    pTable->setModel(&m_model);
    setCentralWidget(pTable);

    //使用代理:
    auto pDelegate0 = new WrapDelegate();
    auto pDelegate1 = new WrapDelegate();
    auto pDelegate2 = new WrapDelegate();
    pTable->setItemDelegateForColumn(0, pDelegate0);
    pTable->setItemDelegateForColumn(1, pDelegate1);
    pTable->setItemDelegateForColumn(2, pDelegate2);
    //pTable->resizeRowsToContents();
}

MainWindow::~MainWindow()
{
    delete ui;
}

完整代码可以在我的资源下载设置QTableView的内容自动换行,代理方式 

效果:

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值