Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Gorthad от Октябрь 06, 2013, 17:35



Название: Лог в GUI-форме
Отправлено: Gorthad от Октябрь 06, 2013, 17:35
Здравствуйте!
Я недавно начал программировать на Qt и столкнулся со следующей задачей.
Хочу сделать, чтобы в GUI был встроенный QPlainTextEditor, в который будет писаться лог программы, как в консоли.
Код:
    QTextCursor text_cursor = QTextCursor(ui->txtLog->document());
    text_cursor.movePosition(QTextCursor::End);
    text_cursor.insertText(qstr);

Однако отображается все только после того, как закончит выполняться функция.
Как реализовать то, что мне нужно?
Пробовал посылать сигналы и ловить слотом, результат тот же.

И еще: может быть для этих целей подойдет какой-нибудь другой виджет, а не QPlainTextEditor?


Название: Re: Лог в GUI-форме
Отправлено: kambala от Октябрь 06, 2013, 18:42
вызывай qApp->processEvents() после text_cursor.insertText(qstr);


Название: Re: Лог в GUI-форме
Отправлено: ViTech от Октябрь 06, 2013, 20:01
Да, в простых случаях, когда приложение с одним потоком, необходимо в нужных местах вызывать qApp->processEvents(), чтобы обрабатывались сообщения и обновлялось содержимое окон. QPlainTextEdit вполне нормальный виджет для отображения лога, и есть у него слот appendPlainText(), которого вполне достаточно, чтобы сообщение добавлялось в конец текста (без создания QTextCursor и т.п.).


Название: Re: Лог в GUI-форме
Отправлено: Gorthad от Октябрь 06, 2013, 22:15
Большое спасибо!
Заработало!
А данный метод я юзаю только потому, что appendPlainText() в конце добавляет параграф... неудобно.
С другой стороны, "консоль" не перематывается вниз из-за использования textCursor...


Название: Re: Лог в GUI-форме
Отправлено: lit-uriy от Октябрь 07, 2013, 19:22
Сигналы и слоты тут самое оно применять.
Из некой "подсистемы" шли сигнал с текстовым сообщением, в классе окна сделай слот, который будет принимать текст и помещать в нужное место QPlainTextEditor