我需要创建一个可滚动的,所有者绘制的小部件,其行为很像QPlainTextEdit
,带有包装文字,在高度取决于宽度的意义上 - 随着内容宽度的减小,内容高度增加。
这样做的最佳方法是什么?我正在考虑将QWidget-derived
课程放在QScrollArea
内,但QPlainTextEdit
来自QScrollArea
,而不是我应该走那条路?
另外,我只想在paintEvent()
中绘制可见区域,否则会浪费。
现在我正在检查QPlainTextEdit
的代码,但它相当复杂且不易阅读,所以如果有人知道在网络上更简单的代码示例,你可以给我一个链接,它会有很大的帮助。
答案 0 :(得分:1)
我会发布我想出的解决方案。这不是最好的,但它主要起作用。
我最终没有从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()));
}
仅绘制可见区域,请参阅Get visible area of QPainter