我需要创建一个可滚动的,所有者绘制的小部件,其行为QPlainTextEdit
与使用自动换行的文本非常相似,因为高度取决于宽度,在某种意义上,随着内容宽度的减小,内容高度也会增加。
最好的方法是什么?我当时正在考虑将我的QWidget-derived
课程放在内QScrollArea
,但该课程QPlainTextEdit
是从派生的QScrollArea
,应该走那条路线吗?
另外,我只想绘制中的可见区域paintEvent()
,否则会很浪费。
现在,我正在检查的代码QPlainTextEdit
,但它相当复杂且不易阅读,因此,如果有人知道在网络上更简单的代码示例,您可以给我一个链接,这将有很大帮助。
我将发布想出的解决方案。它不是最好的,但大多数情况下都有效。
我并没有从QAbstractScrollArea
最后得出结论,而是只是将我的小部件嵌入QScrollArea
具有垂直布局的,效果很好。
我实现了resizeEvent()
(我从QPlainTextEdit
实现中看到了这一点),每次宽度改变时,我都会重新计算高度,然后将小部件的最小高度设置为此。由于布局的工作原理,我设置了最小高度。
void MyWidget::resizeEvent(QResizeEvent *e)
{
// If the widget's width has changed, we recalculate the new height
// of our widget.
if (e->size().width() == e->oldSize().width()) {
return;
}
setMinimumHeight(calculateHeightFromWidth(e->size().width()));
}
对于仅绘制可见区域,请参阅获取QPainter的可见区域。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句