问题标签 [qheaderview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
141 浏览

python - 在 PyQt5 中创建一个 DB Browser 样式的 QHeaderview

我想在 PyQt5 中创建一个 QHeaderView,就像在这个项目中使用的一样(DB Browser for SQLite)。问题是我不懂 C++,也不明白类和小部件是如何从 GitHub 上的源代码创建的。有人如何在python中模拟这个过滤器头吗?

https://github.com/sqlitebrowser/sqlitebrowser/blob/master/src/FilterTableHeader.h

0 投票
1 回答
113 浏览

python - 在 QHeaderView 类中由 Button 触发的插槽中获取正确的父级

只是为了一项运动,我正在玩@ekhumoro的演示代码(原始 Qt4 代码的所有功劳归他所有),他在其中插入了一行新的小部件到. 我将代码移植到 Qt5 并开始向标题添加不同的小部件。a , , 空格 ( ) 和 a没有问题。QLineEditQHeaderviewQTableViewQComboBoxQCheckBoxQWidgetQPushButton

在此处输入图像描述

但是,当我创建一个包含QWidgetaQHBoxLayout和 a 的组合时QPushButton(它是带有“=”符号的组合,在“三”列中)和一个QLineEdit. 所有控件都链接到相关插槽并且运行良好,包括QLineEdit来自第三列中的组合字段,但QPushButton来自该组合小部件的除外。插槽 def 应该在<|=|> 值之间ChangeIntButtonSymbol(self)循环按钮。Text我总是得到一个错误:

这表明,与其他情况不同,这里父(由 检索self.sender())小部件的上下文是不同的,def 接收FilterHeader类作为父类而不是btn. 我还尝试使用 lambda 传递参数:

...但结果完全相同(错误中的措辞不同)。

显然,我并没有完全了解这个QHeaderView扩展的架构并犯了一些基本错误。完整的演示如下,单击“=”按钮时会出现问题,感谢任何解决方案或提示。

0 投票
0 回答
20 浏览

qt - 在 Qt5.12 中,我试图让绘制的水平标题正确调整大小

我将 QHeaderView 子类化为水平标题并重新实现了它的 paintSection() 方法以允许将文本(例如“Axis X1”)添加到标题标签。但是,所有自动调整水平标题大小以使原始文本 + 绘制的文本适合标题的所有尝试都失败了。

调整到标题文本的大小时调整大小似乎可以正常工作,但在将内容添加到标题时失败,因为看起来 Qt 的调整大小算法不考虑绘制的内容?我的代码如下:

请特别注意下面的 void HHeaderView::paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const 方法。这些行:

将内容即“Axis X1”添加到标题标签headertext。不幸的是,当调整列的大小以适应内容并且标题内容被剪裁时,Qt 似乎没有考虑这些额外内容的大小。

0 投票
1 回答
492 浏览

python - 如何使用按钮启用和禁用 QHeaderView 过滤器

关于@ekhumoro 的出色回答以及@Oak_3260548 和@eyllanesc 的修改,我想首先在 QHeaderView 下方有一个没有过滤器的普通视图和一个用于激活(显示)过滤器的按钮:

在此处输入图像描述

单击过滤器按钮(具有属性 button.setCheckable(True))后,我想得到:

在此处输入图像描述

注意:过滤器按钮被按下。现在,当我再次单击“过滤器”按钮(取消按下它)时,我希望 QHeaderView 下方带有过滤器的行消失:

在此处输入图像描述

我该怎么做,换句话说,如何让 QTableView 的 QHeaderView 成为旧的普通的?在应用程序中拥有这种功能非常方便,用户可以随时使用按钮(或任何其他方式)切换 QHeaderView 下方的过滤器行。应用程序的行为将是在未按下按钮并且过滤器行消失时取消视图中的所有过滤器,但这对于这个问题并不重要。

编辑:这是MRE:

编辑:接受的解决方案在许多情况下都可以正常工作,但在某些情况下,它会在窗口关闭时冻结 GUI,所以我找到了一种解决方法:

0 投票
1 回答
57 浏览

qt - QTableWidget:行大小不正确

我正在使用QTableWidget带有特定标头的小示例来实现。但是,一旦我运行该示例,行就无法正确拉伸,因为可以在以下示例中看到(这是错误的行为):

哟

手动调整大小后,我得到了我正在寻找的东西(这是预期的行为):

哟2

处方对话框.h

处方对话框.cpp

到目前为止我做了什么:

1)我尝试以下列方式使用标题,但这并没有给出预期的行为。这种方法的问题是列是等间距的(我不是在寻找这种特定的行为,因为我需要用户根据需要调整它们),最重要的是,该行占据了应用程序窗口的整个空间,从而使该行天大。

2)我尝试了使用horizontalHeader()提供的选项,QTableWidget但没有提供任何改进,实际上我获得了第一个屏幕截图的效果(“何时拍摄”列全部压缩,直到我手动调整)

3)我遇到了这个来源这个其他来源,但没有一个提供关于如何解决问题的说明。

4)我深入研究了这个问题,并使用了我在示例中使用的属性,resizeRowsToContents()但没有改变最终结果中的任何内容。

感谢您对此有所了解并提供有关如何解决问题的指导。

0 投票
1 回答
50 浏览

c++ - 以编程方式自动调整 QTableView 的列大小

我的程序中有一个 QTableView,我想自动调整它的大小。我使用了这些功能

调整它的大小,它适用于我调整窗口大小时。但随后我需要在表中插入一行,这可能需要调整列的大小。我的问题就在这里。当我插入一行时,其中一个字段太大并且系统用树点写入它(例如:“12.03 ...”而不是“12.03.2020”)。我需要调整窗口大小以使系统调整列的大小。

是否有一个我可以调用来强制更新列宽的插槽?

先感谢您 !

PS我正在使用带有c ++的Qt5。

0 投票
1 回答
323 浏览

c++ - 带复选框的 QHeaderView - 如何区分单击标题复选框的右键与单击单元格中的任何位置

QProduitCartoHeaderView在继承自QHeaderView.

在我的标题中,我有一个复选框,用于选中/取消选中同一列中所有数据行的所有复选框。

在此处输入图像描述

目前,当我单击第一列标题单元格中的任意位置(带有复选框的单元格)时,它会检查标题复选框。

我想要做的是仅在我准确单击复选框并且单击外部(但仍在单元格内)以对第一列进行排序时才选中该复选框。

我试图调整复选框矩形的大小(如QProduitCartoHeaderView::paintSection()下面的片段所示),但是当我单击单元格中的任意位置(而不是复选框)时,我仍然会检查它。

注意:我已经设法使代码进行排序和检查。我不能做的是检查我是单击复选框还是单击单元格内的复选框外部。

这是我的自定义标题的片段:

  • QProduitCartoHeaderView.h
  • QProduitCartoHeaderView.cpp(只有有用的代码来避免长帖子)
0 投票
1 回答
30 浏览

python - 在没有单元格拉伸的情况下删除 QTableView() 最后一行下方的灰色带?

相关问题中给出的解决方案消除了给定图像中显示的灰带。如果您按照以下脚本中的方式更改,则此灰色带将返回,并且单元格以垂直或水平方式固定。QtWidgets.QHeaderView.StretchQtWidgets.QHeaderView.Fixed

需要的是在不调整单元格高度或宽度的情况下移除灰色带。这里

注 1:原始图像来自用户xwsz

编码:

注意 2:Martin Fitzpatrick 的原始代码可以在此处找到并在此处进行修改以显示问题。

0 投票
1 回答
95 浏览

qt - 最后一个空列填充 QTableView

QTableView我需要最后(最右边)列是空的,可扩展但不可移动。目标是表格不会突然结束(因为我对行使用替代颜色)或丑陋地向右扩展。里面有QHeaderView一个setFirstSectionMovable(bool);最后一部分我需要类似的东西,让其余部分可以移动。(换句话说:用一个空的不可移动的列填充表格的其余部分)。任何线索如何实现这一目标?

我确实mousePressEvent()在一个子类中覆盖QHeaderView以跳过最后一部分,但它仍然可以通过将其他列移动到它的位置来移动,我不知道如何防止这种情况发生。

0 投票
1 回答
66 浏览

python - 如何在 QTreeWidget 中设置小列宽?

我有一个带有两列的 QTreeWidget,我正在尝试将第二列宽度设置为一个非常小的值。

如果我将宽度设置为超过 35,它将正确调整大小。但是,如果我尝试将宽度设置为 35 以下,它将始终以 35 结束。

有趣的注释:不同的风格似乎给出了不同的“地板”值。Fusion 的厚度不会低于 35,Win 的厚度不会低于 39。

这是一些示例代码,它们将创建一个 QTreeWidget,添加一些项目,然后设置并打印第二列宽度几次。

这是输出(至少在我这边):

所需的输出将是:

只是为了澄清,我没有尝试多次设置列宽。此代码这样做是为了演示将宽度设置为高于或低于 35 的值的各种结果。我的愿望只是能够将列宽设置为小于 35 的任何值。