我正在使用委托在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大小匹配?
谢谢,
大卫
答案 0 :(得分:1)
您应该检查QTableView的resizeColumnsToContents()和resizeRowsToContents位置。
每次将项目添加到模型中时,都会发出信号并将其与调用这两个函数的插槽连接,以便更新视图的几何体。