【问题标题】:Qt4 Designer to create a dialog with a QTableWidgetQt4 Designer 创建一个带有 QTableWidget 的对话框
【发布时间】:2012-05-22 11:33:17
【问题描述】:

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

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

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

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

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

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

非常感谢您的任何回复。

【问题讨论】:

    标签: c++ qt qt-designer


    【解决方案1】:

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

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

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


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

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

    【讨论】:

    • 非常感谢您的回复。上次遇到此问题时,我做了类似的事情。但我想知道是否可以在 Designer 中实现它。这似乎是一件显而易见的事情,我相信其他人也遇到过。我可以在代码中做到这一点,但这有点消除了 Designer 作为显示对话框外观的工具的优势。我的真实对话框比这个例子要复杂一些,并且在其他小部件中包含几个 3x3 表,所以我希望在 Designer 中进行布局。
    • 您可以做的是启用 [horizo​​ntal|vertical]HeaderStretchLastSection。但这将是另一种方式:然后单元格将调整其大小以适应树小部件/对话框。
    • 我希望所有单元格的大小都相同。这是一个 3x3 的系数矩阵,因此某些单元格的大小不同是没有意义的。此外,除了使第三列变小外,它还会使第三行变大,因为默认表大小大约是三行高的两倍。关于单元格大小,是否可以在 Designer 中调整单元格大小,还是必须在代码中完成其他操作?
    • @giles123 这是可能的。我更新了我的答案;请参阅底部的列表。如果你想要标题(我怀疑在这么小的矩阵编辑器中),我不知道如何强制它们的大小。
    • 谢谢李米。对于这种情况,没有标题,我认为您的答案是一个很好的解决方案。但是,我最初认为您可以在不指定列大小的情况下非常简单地实现这一目标。我认为有一种方法可以添加表格,设置行数和列数,然后自动将表格(以及对话框)的大小设置为适当的大小。但是,似乎没有这么简单。就我目前的目的而言,您的解决方案将起作用,我会接受它。至少现在我知道我没有遗漏一些明显的东西。谢谢。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 感谢 Alexeev 的回复。似乎在我最初的问题的更笼统的情况下,答案是至少用代码做一些事情要容易得多,而且可能只是用代码实现整个表。但是,在我的具体情况下,leemes 的答案符合要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多