qt - 将 QTableView 高度调整为其内容(几行)
问题描述
下面是我的应用程序的屏幕截图。我想摆脱红色矩形标记的最后一个表格行之后的空白:
水平尺寸策略正在扩展,垂直尺寸策略最小,对于其他表格,它都设置为扩展。
我正在使用我在另一个 SO 问题中找到的这种方法,但正如您所见,结果并非完美无缺。
void verticalResizeTableViewToContents(QTableView* tableView)
{
tableView->resizeRowsToContents();
// does it work ?
tableView->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
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->setMaximumHeight(rowTotalHeight);
}
在某处,我正在使用此代码来设置其中一个表:
m_Internals->Ui.Measures->setModel(mm->getPh66MeasuresModel());
m_Internals->Ui.Measures->horizontalHeader()->setSectionsMovable(true);
m_Internals->Ui.Measures->horizontalHeader()->setHighlightSections(false);
m_Internals->Ui.Measures->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
m_Internals->Ui.Measures->horizontalHeader()->setStretchLastSection(true);
m_Internals->Ui.Measures->verticalHeader()->hide();
m_Internals->Ui.Measures->setSelectionBehavior(QAbstractItemView::SelectRows);
verticalResizeTableViewToContents(m_Internals->Ui.Measures);
我正在使用 Qt ModelView 模式来填充/更新表格。
更新:我做了一个小例子来用 QTableView 重现这个问题:https ://github.com/embeddedmz/QTableViewAdjustPolicyNotWorkingProperly
使用最新的 Qt 版本(来自 Qt 官方安装程序),没有问题。但是,使用 vcpkg 提供的 Qt 库(肯定是过时的)问题就在那里。
解决方案
如果您在 Ubuntu 20.04 LTS 上有完全可构建的东西,请发布完整项目的链接(将其剥离到这一部分),我将对其进行实际测试。
我与 Qt 合作多年的直觉告诉我,你正在被 Margins 烧毁。
https://doc.qt.io/qt-5/qwidget.html#contentsMargins
您可能需要将下边距设置为零。
https://doc.qt.io/qt-5/qmargins.html#setBottom
如果您检索这些小部件的边距,您可能会发现它们不为零。
推荐阅读
- python - 在 OpenCV 中执行功能时保持流式传输视频?
- kotlin - Kotlin Coroutines - 异步消费一个序列
- javascript - 如何在 sveltekit 应用程序中将菜单项设置为活动状态
- javascript - 单击卡片以触发 div 内的按钮时超出最大调用堆栈大小
- redis - 如何在 apollo v3 中实现 redis 缓存?. 需要使用 npm 包 apollo-server-cache-redis 的完整示例实现
- r - [RShiny][Shinydashboard]根据另一个输入显示/隐藏不同的输入面板
- c++ - 使用 boost 使用自定义键序列化嵌套 unordered_map
- python - 使用 selenium 获取具有内部文本的元素的直接父级的类名
- git - 一种调试 git push/pull 命令中发生的事情的方法?
- python - 诗歌添加包不包含任何功能