gpt4 book ai didi

c++ - PyQt : how to handle auto-resize of widgets when their content changes

转载 作者:太空狗 更新时间:2023-10-29 18:03:29 25 4
gpt4 key购买 nike

当 qt4 小部件的内容发生变化时,我遇到了一些关于其大小的问题。

我将用两个简单的场景来说明我的问题:

场景 1:

我有一个 QLineEdit 小部件。有时,当我使用 QLineEdit.setText() 更改其内容时,单行字符串不再适合当前大小的小部件。我必须选择小部件并使用箭头键在两个方向上滚动字符串才能看到所有内容。

场景 2:

我有一个 QTextEdit 小部件。有时,当我使用 QTextEdit.setHtml() 更改其内容时,呈现的 HTML 内容不再适合当前大小的小部件。小部件开始显示水平和/或垂直滚动​​条,我可以使用它们滚动 HTML 内容。

在这种情况下,我想要的是有一些逻辑来决定在内容更改后,新内容是否不再适合小部件并自动增加小部件大小,以便一切都适合。

如何处理这些情况?我正在使用 PyQt4。

编辑:在阅读了评论和第一个答案(提到在小部件中输入内容)之后,我再次讨论了这个问题。发现一个可怕的错别字让我感到不愉快。我在写 QTextEdit 时指的是 QTextBrowser,很抱歉误导了你。也就是说:我有一个小部件,它呈现我正在更改的 HTML 代码,我希望该小部件足够大以显示所有内容而没有滚动条。

至于 QLineEdit 而不是 QLabel - 我选择了 QLineEdit,因为我注意到我无法使用鼠标从 QLabel 中选择文本进行复制。使用 QLineEdit 是可能的。

最佳答案

我在这里用 C++ 回答,因为那是我最熟悉的,而且您的问题并非特定于 PyQt。

通常,当 sizeHint() 可能发生变化时,您只需要调用 QWidget::updateGeometry(),就像您需要调用 QWidget 一样: :update() 当内容可能发生变化时。

但是,您的问题是,当文本添加到 QLineEditQTextEdit 时,sizeHint() 没有改变。原因是:人们不希望他们的对话随着他们的输入而增长 :)

也就是说,如果您真的希望这些小部件具有随类型增长的行为,您需要从它们继承并重新实现 sizeHint()minimumSizeHint()返回更大的尺寸,并可能通过 setText()append() 等调用 updateGeometry(),以便注意到尺寸提示的变化。

sizehint 的计算并不是完全微不足道的,对于 QLineEdit 来说会比 QTextEdit 更容易(这是一个 secret 的 QAbstractScrollArea ),但您可以查看 sizeHint()minimumSizeHint() 实现以获取灵感(也是 QComboBox 的实现,它有一个模式做你想做的事:QComboBox::AdjustToContents

编辑:您的两个用例(没有滚动条的 QTextBrowser 和 QLineEdit 而不是 QLabel 只是为了选择其中的文本)可以通过使用 QLabel 和足够新的 Qt 来解决。 QLabel 在 Qt 4.2 中获得了链接点击通知和所谓的“文本交互标志”(其中之一是 TextSelectableByMouse)。我能够弄清楚的唯一区别是加载新内容不是自动的,没有历史记录,并且在 QLabel 中没有微焦点提示(即从一个链接跳到另一个链接)。

关于c++ - PyQt : how to handle auto-resize of widgets when their content changes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1153714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com