QLabel 内容更新后适合 QDockPanel 的最小尺寸

Fit minimal size of a QDockPanel after QLabel content update

我有一个 QDockWidget,其中 QGroupBox 作为顶部小部件,应用了 QVBoxLayout。这包含一个 QChartView 和一个 QLabel。

QLabel 包含由几行不同长度组成的文本。

首先,我希望 QChartView 的宽度和高度与 QLabel 相同。

其次,由于 QLabel 的内容在 Slot 方法中由 setText(...) 更新,因此其内容的高度和宽度发生变化。所以我想更新它上面的QChartView的宽度和高度。

目前,我只实现了扩大整个 DockPanel 以容纳更长更宽的 QLabel 内容,但当此内容更窄更宽时不会收缩...

我确实玩了很多东西,但没有真正成功(这里是更新 QLabel 内容的 Slot 方法的片段...):

        self.fkChartView.hide()
        self.pPDetailsLabel.hide()
        self.pPDetailsLabel.parent().hide()
        self.pPDetailsLabel.setText(self.canvas.grayScottModel.getPearsonPatternDescription(specie=type))
        self.pPDetailsLabel.updateGeometry()
        self.pPDetailsLabel.parent().updateGeometry()
        self.pPDetailsLabel.parent().update()

        self.pPDetailsDock.updateGeometry()
        self.pPDetailsDock.update()

        self.pPDetailsLabel.show()
        self.pPDetailsLabel.parent().show()

        # print(self.pPDetailsLabel.sizeHint())
        self.fkChartView.setMinimumHeight(self.pPDetailsLabel.size().width())
        self.fkChartView.setMaximumHeight(self.pPDetailsLabel.size().width())
        self.fkChartView.setMinimumWidth(self.pPDetailsLabel.size().width())
        self.fkChartView.setMaximumWidth(self.pPDetailsLabel.size().width())
        self.fkChartView.updateGeometry()
        self.fkChartView.show()
        self.fkChartView.updateGeometry()
        self.fkChartView.update()

我试图隐藏小部件,所以它们忘记了它们的大小 and/or sizeHint(不确定)。 我也尝试了一些 updateGeometry() 和 update(),但似乎没有帮助。

一个想法,有人吗?

我最终通过在更新 QLabel 内容的插槽方法中执行此操作使其按预期工作:

        self.fkChartView.hide()
        self.pPDetailsLabel.setText(self.canvas.grayScottModel.getPearsonPatternDescription(specie=type))
        self.pPDetailsLabel.adjustSize()
        self.pPDetailsLabel.parent().adjustSize()
        # Sets the dimensions of the chart folowing the label width
        self.fkChartView.setMinimumHeight(self.pPDetailsLabel.size().width())
        self.fkChartView.setMaximumHeight(self.pPDetailsLabel.size().width())
        self.fkChartView.setMinimumWidth(self.pPDetailsLabel.size().width())
        self.fkChartView.setMaximumWidth(self.pPDetailsLabel.size().width())
        self.fkChartView.adjustSize()
        self.fkChartView.show()
        self.pPDetailsDock.adjustSize()

所以我首先隐藏了QChartView,所以它的尺寸不会干扰, 然后由于 adjustSize() 调用,所有的魔法都发生了。内容更新后,我在 QLabel 上执行此操作, 然后在其父级(我的 QDockWidget 中的顶部 QGroupBox)上。 QChartView 仍然隐藏,我强制其尺寸, 然后显示它 最后调整QDockWidget的大小。

它正是我想要的: 如果文本更宽,图表会扩展但保持正方形, 如果文本较窄,图表会缩小,但会保持正方形。 扩展坞的总高度也可以调整以适合,而无需停留越来越长的时间来容纳大量的前 QLabel 内容。