如何根据内容调整 QTableView 的高度?
How do I adjust a QTableView height according to contents?
在我的布局中,我动态生成的 QTableView 似乎调整了大小以仅显示一行。我想让 table 视图的容器有一个滚动条,而不是单独的 table 视图,它应该显示完整内容。
Qt 显然没有为此内置任何东西,您需要手动计算和设置大小。
这就是我为垂直调整大小 (Qt 5.8) 所做的。您可能想要添加 setMaximumHeight/width.
为了进一步开发它,它应该在将水平滚动条添加到尺寸之前检查是否存在水平滚动条。这足以满足我的使用需求。
编辑 2018-03:您可能需要调用 tableView->resizeRowsToContents();在这个函数之前让尺寸实际对应于内容的实际高度。
void verticalResizeTableViewToContents(QTableView *tableView)
{
int count=tableView->verticalHeader()->count();
int scrollBarHeight=tableView->horizontalScrollBar()->height();
int horizontalHeaderHeight=tableView->horizontalHeader()->height();
int rowTotalHeight=0;
for (int i = 0; i < count; ++i) {
// 2018-03 edit: only account for row if it is visible
if (!tableView->verticalHeader()->isSectionHidden(i)) {
rowTotalHeight+=tableView->verticalHeader()->sectionSize(i);
}
}
tableView->setMinimumHeight(horizontalHeaderHeight+rowTotalHeight+scrollBarHeight);
}
@savolai
非常感谢您的代码,它对我来说效果很好。我只是做额外的检查:
void verticalResizeTableViewToContents(QTableView *tableView)
{
int rowTotalHeight=0;
// Rows height
int count=tableView->verticalHeader()->count();
for (int i = 0; i < count; ++i) {
// 2018-03 edit: only account for row if it is visible
if (!tableView->verticalHeader()->isSectionHidden(i)) {
rowTotalHeight+=tableView->verticalHeader()->sectionSize(i);
}
}
// Check for scrollbar visibility
if (!tableView->horizontalScrollBar()->isHidden())
{
rowTotalHeight+=tableView->horizontalScrollBar()->height();
}
// Check for header visibility
if (!tableView->horizontalHeader()->isHidden())
{
rowTotalHeight+=tableView->horizontalHeader()->height();
}
tableView->setMinimumHeight(rowTotalHeight);
}
在我的布局中,我动态生成的 QTableView 似乎调整了大小以仅显示一行。我想让 table 视图的容器有一个滚动条,而不是单独的 table 视图,它应该显示完整内容。
Qt 显然没有为此内置任何东西,您需要手动计算和设置大小。
这就是我为垂直调整大小 (Qt 5.8) 所做的。您可能想要添加 setMaximumHeight/width.
为了进一步开发它,它应该在将水平滚动条添加到尺寸之前检查是否存在水平滚动条。这足以满足我的使用需求。
编辑 2018-03:您可能需要调用 tableView->resizeRowsToContents();在这个函数之前让尺寸实际对应于内容的实际高度。
void verticalResizeTableViewToContents(QTableView *tableView)
{
int count=tableView->verticalHeader()->count();
int scrollBarHeight=tableView->horizontalScrollBar()->height();
int horizontalHeaderHeight=tableView->horizontalHeader()->height();
int rowTotalHeight=0;
for (int i = 0; i < count; ++i) {
// 2018-03 edit: only account for row if it is visible
if (!tableView->verticalHeader()->isSectionHidden(i)) {
rowTotalHeight+=tableView->verticalHeader()->sectionSize(i);
}
}
tableView->setMinimumHeight(horizontalHeaderHeight+rowTotalHeight+scrollBarHeight);
}
@savolai 非常感谢您的代码,它对我来说效果很好。我只是做额外的检查:
void verticalResizeTableViewToContents(QTableView *tableView)
{
int rowTotalHeight=0;
// Rows height
int count=tableView->verticalHeader()->count();
for (int i = 0; i < count; ++i) {
// 2018-03 edit: only account for row if it is visible
if (!tableView->verticalHeader()->isSectionHidden(i)) {
rowTotalHeight+=tableView->verticalHeader()->sectionSize(i);
}
}
// Check for scrollbar visibility
if (!tableView->horizontalScrollBar()->isHidden())
{
rowTotalHeight+=tableView->horizontalScrollBar()->height();
}
// Check for header visibility
if (!tableView->horizontalHeader()->isHidden())
{
rowTotalHeight+=tableView->horizontalHeader()->height();
}
tableView->setMinimumHeight(rowTotalHeight);
}