问题标签 [sizehint]

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 投票
2 回答
1499 浏览

c++ - 使用自定义编辑器调整 QTableView 部分的大小

我有一个应用程序,其中QTableView一个模型派生自QAbstractItemModel:表的第一列包含一个文本(每行的标签),而第二列显示一个可以使用QComboBox从自定义项目委托创建的值来选择的值。表格的内容可能会动态变化(行数、语言...)。

我想调整列的大小,使第二个适合内容,第一个伸展占据剩余空间。

我的第一次尝试是:

结果:

结果1

问题是,当它QComboBox被选中时,它不适合该部分并且被剪裁:

结果2

我设法通过手动增加宽度来解决这个问题:

结果3

现在这里的问题是,通过使用这样的常量(在这种情况下为 40),部分的宽度将根据显示的值而不是所有可能的值而变化(如果最大的值已经显示,而只有最短的值)。此外,该常量将取决于所使用的样式,因为它还与QComboBox.

我曾考虑使用Qt::SizeHintRole来手动计算截面宽度,但它被完全忽略了。即使是这样,我也无法计算文本的实际宽度(使用QFontMetrics::width),因为模型中没有任何字体信息。

我尝试过的另一种方法是在方法中设置调整大小QComboBox策略QItemDelegate::createEditor

但现在组合框要么被剪裁,要么被缩短。

结果4 结果5


如何根据完整的内容范围而不是仅可见数据来设置部分大小?


我正在用迄今为止我找到的最佳方法以及我现在在项目中使用的方法自行回答这个问题,但我不相信它(我详细说明了答案的原因)所以我想知道正确的做法。谢谢!

0 投票
1 回答
1639 浏览

python - Kivy BoxLayout size_hint 不起作用?

我观察到 size_hint_x 在 BoxLayout 中不起作用,例如

或者

Popup 也一样,如果我将值设为零,它会设置为特定的高度或宽度,但如果我使用屏幕,它可以正常工作。

根据 BoxLayout,我是否遗漏了什么?

0 投票
1 回答
1598 浏览

python - 无法理解 size_hint。为什么这个 .kv 简单的代码不能像我预期的那样工作?

我正在学习 Kivy 图书馆,但我遇到了一些问题。我正在尝试做一个简单的换屏应用程序来做一些练习,但我认为我在这里犯了一些错误:

代码是:

我希望最后写入的 boxlayout 是包含它的屏幕的 1/2。我不明白如果

大小提示

与窗口的尺寸或包含该小部件的“父”的尺寸相关联

0 投票
1 回答
130 浏览

python - 为什么在 sizeHint 中设置的 QSize 高度会返回两倍高度的 QRect?

我觉得我错过了一些非常明显的东西,但找不到任何东西。

我有一个自定义项目委托,我将它的 sizeHint 高度设置为 50,但 print 语句返回的矩形是高度的两倍。

0 投票
1 回答
118 浏览

python - 大型 QAbstractTableModel 的 QTableView 动态行高

我知道在 stackoverflow 上有很多次关于如何为 QTableView 设置行高的问题得到了解答。我再问一次,但我的问题并不完全是关于“如何”,至少不是那么简单。我在Qt.SizeHintRole我的自定义模型的数据方法的帮助下成功设置了行高QAbstractTableModel- 请参见下面的代码。(也尝试了非常相似的例子,但在sizeHint()方法的帮助下QStyledItemDelegate- 结果完全相同。)

当我有大约 100 个时,它工作得很好,MODEL_ROW_COUNT如下例所示。但是我的数据集有大约 30-40 千行。结果,这个简单的应用程序启动大约 30 秒,MODEL_ROW_COUNT=35000例如。
这个大延迟的原因是这行代码:如果我要评论这行代码,
self.table_view.verticalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
一切都会很快。MODEL_ROW_COUNT=35000但在这种情况下,data()方法没有被调用,Qt.SizeHintRole我不能操纵行高。

所以,我的问题是 - 如何为具有数千行的数据集设置每行的行高?下面的示例有效,但需要 30 秒才能从 35 000 行开始(显示窗口后一切都很流畅)...

同时如果我使用QSqlTableModel它没有这个问题,我可以使用sizeHint()没有QStyledItemDelegate大问题。但是有太多的委托是一团糟……我可以继承QStyledItemDelegate而不是QAbstractTableModel实现我的自定义模型吗?(我不确定它是否可以作为QAbstractTableModel自定义模型的子类的每个源推荐......)或者我做错了什么并且有比使用更好的方法QHeaderView.ResizeToContents

PS我真的需要不同的高度。数据库中的某些行数据较少,我可能会在几个单元格中显示它们。但其他人有更多数据,我需要额外的空间来显示它。所有行的高度相同意味着要么浪费空间(屏幕上有很多空白),要么缺少某些数据行的基本细节。我CUSTOM_ROW_HEIGHT也只使用 contant,使示例尽可能简单且易于重现 - 您可以将任何数据库与任何大表一起使用(我想即使没有数据库,我也可以重新创建它......很快就会尝试)

0 投票
1 回答
67 浏览

python - 如何调整 QMainWindow 的大小以适合具有 setVerticalHeaderLabels 的 QTableWidget

这是示例代码:

结果如下:

使用 setVerticalHeaderLabels

第 9 行和第 9 列没有显示,并且有滚动条。

如果我注释掉该self.setVerticalHeaderLabels(f'row{i}' for i in range(1, m + 2))行,那么它将起作用:

没有 setVerticalHeaderLabels

如何在具有垂直标题标签的同时完美地将主窗口适合表格小部件?

正如您在代码注释中看到的那样,我已经尝试了python qt 建议的解决方案:自动调整主窗口大小以适应内容,但它们不起作用。