gpt4 book ai didi

c++ - 更改 QHeaderView 空间缓冲区

转载 作者:太空宇宙 更新时间:2023-11-04 13:47:59 24 4
gpt4 key购买 nike

我有一个稍微自定义的 QTableView,显示我开发的模型。当我指示 TableView 调整 ColumnToContents 的大小时,我最终在列文本的两侧各有一个大约 20 像素的额外缓冲区。正如您在下面看到的那样,这对我的表格来说太过分了。

Screenshot showing the unnecessary buffer

用户可以手动调整列的大小以删除该缓冲区,但是当列很多时这很烦人。

如何以编程方式更改此缓冲区/边距大小?我愿意使用委托(delegate)、sizeHints、styleSheets,无论需要什么。我只是找不到设置此值的位置。

编辑:单步执行 QHeaderView::sizeHint () 和 QHeaderView::sectionSizeFromContents () 告诉我这是因为我启用了排序(qheaderview.cpp 的第 2588 行)。禁用排序会删除水平缓冲区。

如果启用排序,为什么 sizehint 会在其宽度上添加标题高度的缓冲区?排序指示器出现在标题上方(见下文)。排序指示符与所需的列宽无关。很奇怪。

enter image description here

除了实现我自己的 QHeaderView 类之外,我看不到解决此问题的方法。有没有更好的办法?

最佳答案

这是 Qt4 中的一个错误,已在 Qt5 中得到修复。它为使用 Vista 样式时不存在的排序指示符留出了额外的空间。

实现我自己的 QHeaderView 子类是在 qt 4.8 中解决这个问题的唯一方法。

QSize MyHeaderView::sectionSizeFromContents(int logicalIndex) const
{
QSize sz = QHeaderView::sectionSizeFromContents(logicalIndex);

//Qt 4.8.x workaround to remove horizontal spacing from sort indicator with vista style
if(isSortIndicatorShown())
{
auto style = qApp->style();
if(orientation() == Qt::Horizontal && style->objectName() == "windowsvista")
{
int margin = style->pixelMetric(QStyle::PM_HeaderMargin, 0, this);
sz.rwidth() -= margin + sz.height();
}
}

return sz;
}

我使用 Qt 5.11.1 在 Windows 7 和 10 上对此进行了测试,并且不再需要解决方法。我不确定它是什么时候修复的。

关于c++ - 更改 QHeaderView 空间缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24938701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com