Qt4小技巧——QTextEdit自动滚屏

原文链接:Qt4小技巧——QTextEdit自动滚屏

今天偶然需要QTextEdit显示出调试的log,仔细翻了下文档,才发现没有设置自动滚屏的方法。

总不能每次出来新的log,还要手动翻到最下面吧,于是干脆自己手写了一个,可以利用 QTextCursor来定位内容的最后位置,当每次内容更新信号发送之后,移动即可。

简单的例子如下:

TextEdit.h

#ifndef TEXTEDIT_H

#define TEXTEDIT_H

#include <QTextEdit>

class QTimer;

class TextEdit : public QTextEdit

{

Q_OBJECT

public:

TextEdit(QWidget *parent = 0);

~TextEdit();

private:

QTimer *timer;

public slots:

void addText();

void autoScroll();

};

TextEdit.cpp

#include <QTextCursor>

#include <QTimer>

#include “TextEdit.h”

TextEdit::TextEdit(QWidget *parent)

: QTextEdit(parent)

{

timer = new QTimer(this);

connect(timer, SIGNAL(timeout()), this, SLOT(addText()));

connect(this, SIGNAL(textChanged()), this, SLOT(autoScroll()));

timer-&gt;start(1000);

}

TextEdit::~TextEdit()

{

}

void TextEdit::addText()

{

QString text = this-&gt;toPlainText();

text.append(“Test\n”);

this-&gt;setText(text);

}

void TextEdit::autoScroll()

{

QTextCursor cursor = this-&gt;textCursor();

cursor.movePosition(QTextCursor::End);

this-&gt;setTextCursor(cursor);

}

main.cpp

#include <QtGui/QApplication>

#include “TextEdit.h”

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

TextEdit w;

w.show();

return a.exec();

}

发表回复