Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Примерный ученик от Март 01, 2013, 18:23



Название: Позиционирование места ввода в QTextEdit
Отправлено: Примерный ученик от Март 01, 2013, 18:23
Код:
	textEditLog->textCursor().setPosition(posLogP);
textEditLog->setTextColor(Qt::black);
QString dateTime="["+dt.date().toString(Qt::LocalDate)+"]["+dt.time().toString()+"]   ";
textEditLog->insertPlainText(dateTime);
textEditLog->setTextColor(Qt::darkBlue);
textEditLog->insertPlainText(txt+"\n");
posLogP=textEditLog->textCursor().position();
Стоит щелкнуть кнопкой мышки на любом месте QTextEdit, как вывод начинается с данного места и установка позиции курсора не срабатывает.
И еще вопрос, а как сделать, что бы после добавления строки автоматически происходила прокрутка текста вверх?


Название: Re: Позиционирование места ввода в QTextEdit
Отправлено: Примерный ученик от Март 01, 2013, 18:24
забыл указать: QT4.5 + VC2005


Название: Re: Позиционирование места ввода в QTextEdit
Отправлено: ConConovaloff от Март 08, 2013, 08:32
Добрый день.

Если я правильно понял, вам необходимо 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 в этом примере не использован, но оставлен для демонстрации, что можно иметь несколько курсоров и писать в любой из них.
Добавление тестового текста, происходит вращением колесика мышки.


Название: Re: Позиционирование места ввода в QTextEdit
Отправлено: schmidt от Март 08, 2013, 12:42
Если у вас задача выводить лог, зачем вам QTextEdit? QTextEdit предназначен для ввода и редактирования текста. Используйте QTextBrowser.

https://qt-project.org/doc/qt-4.8/qtextedit.html#append
Цитировать
void QTextEdit::append ( const QString & text ) [slot]

Appends a new paragraph with text to the end of the text edit.


Название: Re: Позиционирование места ввода в QTextEdit
Отправлено: Примерный ученик от Март 14, 2013, 08:54
Всем спасибо.  ::)