在QTableWidget中去除行内边距?

3

在填充QTableWidget表格后,我调用:

table->resizeRowsToContents();

这将使每行变窄,但仍然有许多间距,如下图所示:

resizeRowsToContents()调整大小后的表格

通过查看文档,我发现可以使用以下代码设置每行的高度:

table->verticalHeader()->setDefaultSectionSize(16);  

这将删除填充并给我想要的紧凑间距:

    setDefaultSectionSize(16)后的表格

但是,我担心使用像素绝对大小。如果系统字体设置为较大的字体,则文本可能不适合行。

有没有一种方法可以删除行之间的填充,并确保文本始终适合?

1个回答

0

使用自定义委托与实现了正确返回字体大小的QAbstractItemDelegate::sizeHint()方法。

为了计算正确的高度,您可以使用sizeHint()方法的option参数提供的QFontMetrics

int height = option.fontMetrics.height();

更准确地说
int height = option.fontMetrics.boundingRect(index.data().toString()).height();

编辑:如何使用委托:

CMyDelegate* delegate = new CMyDelegate(tableView);
tableView->setItemDelegate(delegate);

谢谢,这听起来是个好的解决方案。我对Qt还比较陌生,不太清楚QAbstractItemDelegate在哪里发挥作用。按照你所描述的方式,通过子类化QTableWidgetItem并重写sizeHint()方法,这样做不会更容易吗? - Ian Conner
我稍微更新了我的答案。是的,您也可以对QTableWidgetItem进行子类化,并在那里重新实现sizeHint()方法。 - Tomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接