获取委托以在QTableView中设置单元格的大小

时间:2011-11-03 18:34:22

标签: qt qt4

我正在使用委托在QTableView中显示来自QAbstractTableModel的QPixmap,如下所示:

void LabelDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
  QPixmap pixmap = index.data(Qt::DisplayRole).value<QPixmap>();

  QRect rect = option.rect;
  rect.adjust(rect.width()/3, 0, -rect.width()/3, 0);
  painter->drawPixmap(rect, pixmap, pixmap.rect());
}

但是,我希望它确保单元格足够大以显示整个QPixmap。我尝试使用sizeHint函数:

QSize LabelDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const
{
  std::cout << "sizeHint()" << std::endl;
  unsigned int sideLength = 300;
  return QSize(sideLength, sideLength);
}

但它似乎没有调整细胞大小。如何强制单元格大小与QPixmap大小匹配?

谢谢,

大卫

1 个答案:

答案 0 :(得分:1)

您应该检查QTableView的resizeColumnsToContents()resizeRowsToContents位置。

每次将项目添加到模型中时,都会发出信号并将其与调用这两个函数的插槽连接,以便更新视图的几何体。