我正在开发一个 Qt 应用程序,我正在尝试找到一种方法将 QTextEdit 用作 label
没有滚动条的长文本。在我的用户界面中,我有一个 QScrollArea
并且在其中我想放置几个 QTextEdit
小部件,我只想在 QScrollArea
内使用滚动。问题是,无论我如何尝试调整 QTextEdit
的大小,它似乎都有最大高度和文本剪切,即使我手动设置大小并且 QTextEdit::size
返回正确的值。
我对 QLabel
做了同样的事情,它工作正常,但在这种情况下,我需要一些仅在 QTextEdit
中提供的方法。
我发现这篇文章: 调整 QT 的 QTextEdit 以匹配文本高度:maximumViewportSize()
给出的答案如下:
我已经解决了这个问题。我必须做两件事才能让它工作:
- 向上走小部件层次结构并确保所有大小策略都有意义,以确保如果任何子小部件想要大/小,那么父小部件也希望是相同的东西。
- 这是修复的主要来源。事实证明,由于 QTextEdit 在 QFrame 内,它是 QScrollArea 中的主要小部件,因此 QScrollArea 有一个约束,即除非“widgetResizable”属性为真,否则它不会调整内部小部件的大小。相关文档在这里: http ://doc.qt.io/qt-4.8/qscrollarea.html#widgetResizable-prop。在我尝试使用此设置并使其正常工作之前,我并不清楚文档。从文档来看,这个属性似乎只处理主滚动区域想要调整小部件大小的时间(即从父级到子级)。这实际上意味着,如果滚动区域中的主小部件想要调整大小(即从子到父),则必须将此设置设置为 true。因此,故事的寓意是 QTextEdit 代码在覆盖 sizeHint 方面是正确的,但 QScrollArea 忽略了从主框架的 sizeHint 返回的值。
问题是我不知道如何访问 QTextEdit's
QScrollArea
以启用 widgetResizable
。谁能解释我如何实现这一点或建议一种不同的方式来调整 QTextEdit
以完全适合它的内容?
原文由 madasionka 发布,翻译遵循 CC BY-SA 4.0 许可协议
这将允许文本框的高度根据需要更改。您也可以稍微编辑代码以处理宽度。