1

我希望在 Qt Designer 和 Qt v4.7.1 中使用 QTableWidget 是一个简单的问题。我想创建一个对话框,其中 QTableWidget 设置为 3x3 网格,然后将表格的初始大小设置为完全显示 3x3 网格,没有滚动条。我不希望桌子比这更大或更小。然后,我想将对话框的初始大小(可以是固定大小)设置为该表所需的确切大小。

我在 Qt Designer 中完成了这些步骤:

  1. 创建一个新对话框(对于这个例子,我们将使用一个没有按钮的对话框)。
  2. 拖入一个 QTableWidget。
  3. 双击表格并设置 3 行(称为 1、2 和 3)和 3 列(同样),然后点击 OK。
    • 表格现在与我最初拖入时的空表格大小相同。这对于三列来说不够宽,所以我有一个水平滚动条,对于三行来说太高了,所以我有很多空白空间在底部。
  4. 右键单击对话框并选择“在网格中布局”(或水平/垂直)。
    • 该表现在调整大小以填充大于所需的对话框,因此我可以看到所有行/列,但右侧和底部有很多空白空间。
  5. 右键单击对话框并说“调整大小”。
    • 表格现在跳回到初始大小,即。水平滚动条不够宽,而且太高。调整对话框的大小以适合此表。

调整大小以适合表格的对话框是正确的。但是我怎样才能调整表格的大小以适应它的内容呢?

我尝试了很多其他的东西,例如。将表格上的大小策略更改为“固定、固定”或“最小、最小”,但它仍希望将初始大小设置为与内容不匹配的大小。理想情况下,我希望表格/对话框仅设置正确的初始大小并允许用户使对话框更小(这将添加滚动条),但如果我必须固定大小,这并不是世界末日。

是否可以在 Qt Designer 中执行此操作,或者我应该在代码中设置大小?

非常感谢任何回复。

4

2 回答 2

2

请注意,除非 QTableWidget 不强制任何大小,否则您的 QDialog 也不强制。所以你需要的是固定 QTableWidget 的大小;QDialog 与此无关。当 QTableWidget 想要强制另一个大小时,布局将尝试调整 QDialog 的大小。

但是据我所知,将 QTableWidget 的大小设置为特定的行数/列数是不可能的,至少在 QtDesigner 中是不可能的。

您需要编写一些代码来实现这一点。代码需要请求列的宽度和行的高度(包括标题),并添加小部件的边框。然后使用ui->tableWidget->setFixedSize(...). 如果您为用户启用此功能,您还需要对调整列/行的大小做出反应。


对于固定的单元格大小和不可见的标题,有一个无需手动代码的可能解决方案(完全在 QtDesigner 中):

  • 设置(水平|垂直)HeaderVisible = false
  • 设置 (horizo​​ntal|vertical)HeaderDefaultSectionSize = (fixedValue)
  • 设置 (horizo​​ntal|vertical)HeaderMinimumSectionSize = (fixedValue)
  • 将 QTableWidget 的大小设置为大小的总和。请记住将(列数 + 1)和(行数 + 1)像素添加到 QTableWidget 的固定总大小。
于 2012-05-22T11:40:18.177 回答
1

对于固定单元格大小,您可以直接从 QtDesigner 使用 setFixedSize 和 QSizePolicy::Fixed。

如果您想根据内容长度调整列/行的大小 - 在代码中使用 resizeColumn(s)[Row(s)]ToContents。

如果要将调整大小附加到 QDialog 调整大小 - 在代码中的 Dialog 的 resizeEvent 中编写代码。

动态调整表格单元格的大小只能来自代码而不是来自 QtDesigner

于 2012-05-22T12:00:50.190 回答