如何根据内容调整QTableView高度?

时间:2017-02-25 16:42:46

标签: qt user-interface qtableview

在我的布局中,我动态生成的QTableViews似乎被调整为仅显示一行。我想让表视图的容器有一个滚动条而不是单独的表视图,它应该显示完整的内容。

2 个答案:

答案 0 :(得分:5)

@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);
}

答案 1 :(得分:4)

Qt显然没有内置任何东西,你需要手动计算和设置大小。

我正是这样做的垂直尺寸调整(Qt 5.8)。您可能想要添加setMaximumHeight / width。

为了进一步开发它,它应该在将其添加到大小之前检查是否存在水平滚动条。这对我的用法来说已经足够了。

编辑2018-03:您可能想要调用tableView-&gt; 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);
}