gpt4 book ai didi

c++ - Qt:如何创建一个可滚动的、自绘的小部件

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:43 28 4
gpt4 key购买 nike

我需要创建一个可滚动的、所有者描述的小部件,它的行为很像 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()));
}

要仅绘制可见区域,请参阅 Get visible area of QPainter

关于c++ - Qt:如何创建一个可滚动的、自绘的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22256065/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com