当前位置: 代码迷 >> QT开发 >> 怎样实现qtableview也许qtablewidget的单元格自动换行
  详细解决方案

怎样实现qtableview也许qtablewidget的单元格自动换行

热度:188   发布时间:2016-04-25 03:15:40.0
怎样实现qtableview或者qtablewidget的单元格自动换行
网上搜到有自动调整列高的方法,和qlable自动换行的方法,都不行。
大家有遇到过同样的问题吗?
------解决方案--------------------
tableview单元格换行的方法:
(1)实现自己的delegate,重写 paint 函数,其中关键点是加上  Qt::TextWordWrap :
//重载绘制函数, 目的使得 item 中的文本可以自动换行
void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                          const QModelIndex &index)
{
        QString text = index.model()->data(index, Qt::DisplayRole).toString();
        //绘制文本
        painter->drawText( option.rect, Qt::TextWordWrap 
------解决方案--------------------
 Qt::AlignHCenter 
------解决方案--------------------
 Qt::AlignVCenter, text );
}

(2) 使用 tableview 相关的接口,根据表格的字数长度来设置表格的列高度,比如:
 int rowHeight = (list.at(col).length() - 1) / DEFAULT_COL_WIDTH;
                                rowHeight += 1;
                                tv_channel->setRowHeight(row, rowHeight * DEFAULT_ROW_HEIGHT );

------解决方案--------------------
void QTableView::resizeRowsToContents () [slot]

Resizes all rows based on the size hints of the delegate used to render each item in the rows.

试下这个,resizeEvent下调用这个,在填完数据后调用
  相关解决方案