【问题标题】:Get a delegate to set the size of a cell in a QTableView获取委托以设置 QTableView 中单元格的大小
【发布时间】:2011-11-03 18:34:22
【问题描述】:

我正在使用委托在 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 大小?

谢谢,

大卫

【问题讨论】:

    标签: qt qt4


    【解决方案1】:

    您应该检查 QTableView 的 resizeColumnsToContents()resizeRowsToContents 插槽。

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

    【讨论】:

    • 嗯,我刚刚尝试过 - 问题是如果列/行大于绘制的像素图,它们不会缩小以适应。有没有办法强制大小而不是依赖 resize*ToContents() 函数?
    • 如果你想要一个固定的列宽,你可以使用setColumnWidth函数。同样的 setRowHeight。但是我建议使用 resizeToContents 函数
    • 太棒了。感谢您在委托中使用信号的建议!
    猜你喜欢
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多