Russian Qt Forum
Июнь 16, 2024, 05:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Позиционирование места ввода в QTextEdit  (Прочитано 4288 раз)
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« : Март 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, как вывод начинается с данного места и установка позиции курсора не срабатывает.
И еще вопрос, а как сделать, что бы после добавления строки автоматически происходила прокрутка текста вверх?
Записан

Как мало времени и как много нужно узнать
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #1 : Март 01, 2013, 18:24 »

забыл указать: QT4.5 + VC2005
Записан

Как мало времени и как много нужно узнать
ConConovaloff
Гость
« Ответ #2 : Март 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 в этом примере не использован, но оставлен для демонстрации, что можно иметь несколько курсоров и писать в любой из них.
Добавление тестового текста, происходит вращением колесика мышки.
Записан
schmidt
Гость
« Ответ #3 : Март 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.
« Последнее редактирование: Март 08, 2013, 12:47 от schmidt » Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #4 : Март 14, 2013, 08:54 »

Всем спасибо.  Строит глазки
Записан

Как мало времени и как много нужно узнать
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.07 секунд. Запросов: 22.