
或者你不用scrollview,最外层用listView,把上面的部分整个当成一个headView,这样可以滑动,也可以解决你的问题
对单个item,将内容截断在内存里暂存一个索引表,textview直接使用内存表里读取内容;对大量item,可以分页刷新。(8-10个貌似不多啊,是不是有其它地方卡顿了。。)
由于QPlainTextEdit继承自QAbstractScrollArea,与普通的直接继承自QWidget的控件存在差异,QAbstractScrollArea中包含一个视窗,该视窗可以通过viewport函数来获取,刚好所有的绘制 *** 作都是在该视窗内部的,所以你应该在视窗内部进行绘制,而不是外围的widget中进行绘制(有点绕,还是看下面的代码)假设你在头文件有如下定义:
//editor.h
class Editor : public QPlainTextEdit
{
Q_OBJECT
public:
Editor(QWidget* parent = 0):QPlainTextEdit(parent){}
virtual ~Editor(){}
//...
protected:
void paintEvent(QPaintEvent *e)
//..
}
源文件内容如下
void Editor::paintEvent(QPaintEvent *e)
{
//通过viewport函数获取视窗并进行绘制
//我只是简单的填充了一种颜色。
QPainter painter(viewport())
painter.fillRect(rect(),Qt::cyan)
//调用QPlainTextEdit默认的绘制函数,不调用的话
//后果会很严重的。
QPlainTextEdit::paintEvent(e)
}
虽然不明白你为嘛要重载paintEvent不过我想说,如果只是为了更改背景为目的,那还是用style sheet,方便!只要不要求速度,那么就用style sheet
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)