当 qt4 小部件的内容发生变化时,我遇到了一些大小问题。
我将用两个简单的场景来说明我的问题:
场景一:
我有一个 QLineEdit 小部件。有时,当我使用 QLineEdit.setText() 更改其内容时,单行字符串不再适合其当前大小的小部件。我必须选择该小部件并使用箭头键双向滚动字符串才能查看全部内容。
场景2:
我有一个 QTextEdit 小部件。有时,当我使用 QTextEdit.setHtml() 更改其内容时,渲染的 HTML 内容不再适合当前大小的小部件。小部件开始显示水平和/或垂直滚动条,我可以使用它们来滚动 HTML 内容。
在这种情况下,我想要的是有一些逻辑来决定内容更改后,新内容是否不再适合小部件,并自动增加小部件大小,以便一切都适合。
这些场景如何处理?
我正在使用 PyQt4。
编辑:在阅读评论和第一个答案(其中提到在小部件中输入内容)后,我再次讨论了这个问题。我很不愉快地惊讶地发现了一个可怕的错字。当我写 QTextEdit 时,我指的是 QTextBrowser,很抱歉误导了您。也就是说:我有一个小部件,它呈现我正在更改的 HTML 代码,并且我希望该小部件能够增长到足以显示所有内容而无需滚动条。
至于 QLineEdit 而不是 QLabel - 我选择了 QLineEdit,因为我注意到我无法用鼠标从 QLabel 选择文本来复制它。使用 QLineEdit 这是可能的。
我在这里用 C++ 回答,因为这是我最熟悉的,而且你的问题并不特定于 PyQt。
通常情况下,您只需要调用QWidget::updateGeometry()
当。。。的时候sizeHint()
可能已经改变了,就像你需要打电话一样QWidget::update()
当内容可能发生变化时。
然而,你的问题是sizeHint()
添加文本时不会改变QLineEdit
and QTextEdit
。原因是:人们并不期望他们的对话会随着他们输入的内容而增长:)
也就是说,如果您确实希望在这些小部件中实现随类型增长的行为,您需要继承它们并重新实现sizeHint()
and minimumSizeHint()
返回较大的尺寸,并且可能setText()
, append()
等来电updateGeometry()
所以注意到尺寸提示的变化。
sizehint 的计算并不完全是微不足道的,并且对于QLineEdit
比QTextEdit
(这是秘密的QAbstractScrollArea
),但你可以看看sizeHint()
and minimumSizeHint()
灵感的实现(也是QComboBox
,它有一个模式可以完全满足您的需求:QComboBox::AdjustToContents
.
编辑:您的两个用例(QTextBrowser没有滚动条和QLineEdit而不是QLabel仅用于选择其中的文本)可以通过使用QLabel和足够新的Qt来解决。 QLabel 在 Qt 4.2 中获得了链接点击通知和所谓的“文本交互标志”(其中之一是 TextSelectableByMouse)。我能够看出的唯一区别是,加载新内容不是自动的,没有历史记录,并且 QLabel 中没有微焦点提示(即从一个链接切换到另一个链接)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)