在 QTreeView 中设置单元格的大小



我需要设置:

-minimum height for a cell in QTreeView (25px)
-the height and width to fit with the content of each cell.

我知道我们可以在委托中使用 sizeHint(( 或模型中的 sizeHintRole 来做到这一点,但仍然无法想象函数应该是什么样子。这是我的委托中的 paint((:

const int marginLeft = 10; // margin between text in each cell with the left border
const int marginLeftFirstColumn = 20; //margin between text and the left border in the first column
const int marginRight = 10;
void TableDelegate::paint( QPainter *p_painter, const QStyleOptionViewItem &p_option, const QModelIndex &p_index ) const
{
QStyleOptionViewItem option = p_option;
TableDataRow::Type type = static_cast<TableDataRow::Type>( p_index.data( Qt::UserRole ).toInt() );
QString text = p_index.data( Qt::DisplayRole ).toString();
QFont font = p_painter->font();
int col = p_index.column();
switch ( type )
{
case TableDataRow::Type::Data:
{
font.setWeight( QFont::Normal );
p_painter->setFont( font );
if ( col == 0 )
{
option.rect.setRect( option.rect.left() + marginLeftFirstColumn, option.rect.top(), option.rect.width() - marginRight, option.rect.height() );
}
else
{
option.rect.setRect( option.rect.left() + marginLeft, option.rect.top(), option.rect.width() - marginRight, option.rect.height() );
}
break;
}
case  TableDataRow::Type::MainCaption:
{
p_painter->fillRect( p_option.rect, Qt::gray ); //draw background
font.setWeight( QFont::Bold );
p_painter->setFont( font );
option.rect.setRect( option.rect.left() + marginLeft, option.rect.top(), option.rect.width() - marginRight, option.rect.height() );
break;
}
}
p_painter->drawText( option.rect, Qt::AlignVCenter | Qt::TextWordWrap, text );
}
QSize TableDelegate::sizeHint( const QStyleOptionViewItem &p_option, const QModelIndex &p_index ) const //this function to compensate the alignment
{
QSize size = QStyledItemDelegate::sizeHint( p_option, p_index );
if ( p_index.column() == 0 )
{
size.setWidth( size.width() + marginLeftFirstColumn );
}
else
{
size.setWidth( size.width() + marginLeft );
}
return size;
}

你们能帮我处理模型中的data((函数并在委托中更新sizeHint((吗?

以下是如何使用QAbstractItemModel::data()函数为特定表格单元格设置大小的粗略示例:

QVariant MyModel::data(const QModelIndex & index, int role) const
{
if (role == Qt::SizeHintRole)
{
// An example. Set the size of the first cell.
if (index.row() == 0 && index.column() == 0)
{
return QSize(100, 100);
}
}
else if (role == Qt::DisplayRole)
{
// Manage how item should appear.
}
return QAbstractItemModel::data(index, role);
}

相关内容

  • 没有找到相关文章

最新更新