如何调整 QTextEdit 以适应其内容

新手上路,请多包涵

我正在开发一个 Qt 应用程序,我正在尝试找到一种方法将 QTextEdit 用作 label 没有滚动条的长文本。在我的用户界面中,我有一个 QScrollArea 并且在其中我想放置几个 QTextEdit 小部件,我只想在 QScrollArea 内使用滚动。问题是,无论我如何尝试调整 QTextEdit 的大小,它似乎都有最大高度和文本剪切,即使我手动设置大小并且 QTextEdit::size 返回正确的值。

我对 QLabel 做了同样的事情,它工作正常,但在这种情况下,我需要一些仅在 QTextEdit 中提供的方法。

我发现这篇文章: 调整 QT 的 QTextEdit 以匹配文本高度:maximumViewportSize()

给出的答案如下:

我已经解决了这个问题。我必须做两件事才能让它工作:

  1. 向上走小部件层次结构并确保所有大小策略都有意义,以确保如果任何子小部件想要大/小,那么父小部件也希望是相同的东西。
  2. 这是修复的主要来源。事实证明,由于 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 许可协议

阅读 1.1k
1 个回答

这将允许文本框的高度根据需要更改。您也可以稍微编辑代码以处理宽度。

 connect( m_textField, SIGNAL( textChanged() ), this, SLOT( onTextChanged() ) );

void MyClass::onTextChanged()
{
  QSize size = m_textField->document()->size().toSize();

  m_textField->setFixedHeight( size.height() + 3 );
}

原文由 Tom Hickson 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题