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->start(1000);
}
TextEdit::~TextEdit()
{
}
void TextEdit::addText()
{
QString text = this->toPlainText();
text.append(“Test\n”);
this->setText(text);
}
void TextEdit::autoScroll()
{
QTextCursor cursor = this->textCursor();
cursor.movePosition(QTextCursor::End);
this->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();
}