PyQt:如何在内容更改时处理窗口小部件的自动调整大小

11 c++ python qt qt4 pyqt4

当内容发生变化时,我遇到了qt4小部件大小的问题.

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

场景1:

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

场景2:

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

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

这些方案是如何处理的?我正在使用PyQt4.

编辑:在阅读了评论和第一个答案(提到在窗口小部件中输入内容)后,我再次回答了这个问题.发现一个可怕的拼写错误令我不高兴.当我写QTextEdit时,我的意思是QTextBrowser,我为误导你而道歉.那就是:我有一个小部件,它呈现我正在改变的HTML代码,我希望小部件增长到足以显示所有内容而不需要滚动条.

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

Mar*_*utz 8

我在这里用C++回答,因为那是我最熟悉的,而你的问题并不是PyQt所特有的.

通常情况下,您只需要QWidget::updateGeometry()sizeHint()可能已更改时进行呼叫,就像您需要QWidget::update()在内容可能已更改时进行呼叫一样.

但问题是,sizeHint()文本添加到QLineEdit和时不会发生变化QTextEdit.原因是:人们不希望他们的对话框成长为他们类型:)

也就是说,如果你真的想在那些你需要从他们继承并重新实现增长的小部件,因为你型行为sizeHint(),并minimumSizeHint()返回较大的尺寸,和潜在的setText(),append()等打电话updateGeometry()让sizehint变化注意到.

该sizehint计算将不完全微不足道的,而将是比较容易的方式QLineEditQTextEdit(这是一个秘密QAbstractScrollArea),但你可以看看sizeHint(),并minimumSizeHint()实现了灵感(还有一个是QComboBox,其中有一个模式做什么你想要:QComboBox::AdjustToContents.

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