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

Posted

技术标签:

【中文标题】如何根据内容调整 QTableView 的高度?【英文标题】:How do I adjust a QTableView height according to contents? 【发布时间】:2017-02-25 16:42:46 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

@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 的高度?的主要内容,如果未能解决你的问题,请参考以下文章

QTableView根据内容自动调整列宽行高

QTableView根据内容自动调整列宽行高

QTableView根据内容自动调整列宽行高

根据内容动态调整 iframe 高度

QTableView 列宽可调

如何根据ios 8中的内容动态调整UITableview Header高度