Добрый день.
Если я правильно понял, вам необходимо 2 опции:
- когда пользователь переведет курсор на случайное место в тексте, добавление нового текста должно продолжаться в последнюю строку, а не в позицию пользовательского курсора.
- После очередной записи в последнюю строку за пределами окна, окно должно продолжать показывать первые строки не перемещаясь вниз.
В этом случае, нижеприведенный код подойдет вам:
C++ (Qt)
#include <QtCore>
#include <QtGui>
#define logDate "["+dt.date().toString(Qt::LocalDate)+"]["+dt.time().toString()+"] "
class MyTextEdit : public QTextEdit{
Q_OBJECT
public:
QTextCursor startCursor;
QTextCursor endCursor;
QTextCharFormat blueColor;
QTextCharFormat blackColor;
MyTextEdit(QWidget* parent = 0) :
QTextEdit(parent)
{
blueColor = QTextCharFormat();
blueColor.setForeground(QBrush(QColor(0,0,254)));
blackColor = QTextCharFormat();
blackColor.setForeground(QBrush(QColor(0,0,0)));
endCursor = textCursor();
endCursor.setCharFormat(blueColor);
startCursor = cursorForPosition(QPoint(0,0));
}
void wheelEvent(QWheelEvent *e){
QDateTime dt(QDateTime::currentDateTime());
endCursor.clearSelection();
endCursor.insertText(logDate, blueColor);
endCursor.insertText("server in active \n", blackColor);
}
};
//#include "main.moc"
int main(int argc, char** argv){
QApplication a(argc, argv);
MyTextEdit* textEditLog = new MyTextEdit;
textEditLog->show();
return a.exec();
}
startCursor в этом примере не использован, но оставлен для демонстрации, что можно иметь несколько курсоров и писать в любой из них.
Добавление тестового текста, происходит вращением колесика мышки.