作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要创建一个可滚动的、所有者描述的小部件,它的行为很像 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/
我是一名优秀的程序员,十分优秀!